Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/82.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R如何对时间序列对象使用apply函数并将日期附加到特定列?_R_Date_Apply_Zoo_Portfolio - Fatal编程技术网

R如何对时间序列对象使用apply函数并将日期附加到特定列?

R如何对时间序列对象使用apply函数并将日期附加到特定列?,r,date,apply,zoo,portfolio,R,Date,Apply,Zoo,Portfolio,我有两个价格系列 require(quantmod) require(TTR) tickers = c("IBM","SPY") getSymbols(tickers, from="2010-10-20", to="2014-09-22") prices = do.call(merge, lapply(tickers, function(x) Cl(get(x)))) > head(prices) IBM.Close SPY.Close 2010-10-20

我有两个价格系列

require(quantmod)
require(TTR)

tickers = c("IBM","SPY")
getSymbols(tickers, from="2010-10-20", to="2014-09-22")
prices = do.call(merge, lapply(tickers, function(x) Cl(get(x))))

> head(prices)
          IBM.Close SPY.Close
2010-10-20    139.07    117.87
2010-10-21    139.83    118.13
2010-10-22    139.67    118.35
2010-10-25    139.84    118.70
2010-10-26    140.67    118.72
2010-10-27    141.43    118.38
现在我想使用TTR软件包的SMA功能来平滑该系列

sma.IMB = SMA(prices[,1])
sma.SPY = SMA(prices[,2])

sma.prices = cbind(sma.IBM, sma.SPY)

> head(sma.prices)
           IBM.Close.SMA.3 SPY.Close.SMA.3
2010-10-20              NA              NA
2010-10-21              NA              NA
2010-10-22        139.5233        118.1167
2010-10-25        139.7800        118.3933
2010-10-26        140.0600        118.5900
2010-10-27        140.6467        118.6000
这在处理许多资产时非常繁琐,因此我想使用apply缩短此过程

sma.prices = apply(prices, 2, SMA)

> head(sma.prices)
     IBM.Close SPY.Close
[1,]        NA        NA
[2,]        NA        NA
[3,]        NA        NA
[4,]        NA        NA
[5,]        NA        NA
[6,]        NA        NA

> sma.prices[9:11,]
     IBM.Close SPY.Close
[1,]        NA        NA
[2,]   141.217   118.504
[3,]   141.727   118.712
如您所见,日期未附加到特定行,默认n=10移动平均数用于计算。我的问题是如何保持动物园输出的日期。非常感谢。

试试这个:

sma.prices <- prices
sma.prices[] <- apply(prices, 2, SMA)

sma.pricesapply返回需要转换为zoo对象的矩阵。为了确保新的zoo系列中的日期与TTR函数返回的日期匹配,您可以首先使用TTR函数及其使用的任何参数定义一个函数,然后使用该函数生成新的zoo系列。
下面的代码将TTR_fn定义为SMA,n=3,以定义3天移动平均值,然后使用TTR_fn进行计算并获得正确的日期

TTR_fn <- function(x)  SMA(x, n=3)
sma.prices  <- zoo(apply(prices, 2, TTR_fn), 
                   order.by=index(TTR_fn(prices[,1]) ) )

TTR\u fn我真的很尴尬,这么简单。谢谢你,沃尔特。这也是一个很好的方法。事实上,我将使用您的解决方案,因为控制SMA函数的输入在这里非常简洁。