处理TTR中的多列时间序列

时间:2013-11-05 17:22:52

标签: r time-series

我每天下载2个股票历史,追溯到2000年:

library(quantmod)
check <- c("FB","GOOG")
getSymbols(check, from='2000-01-01')

隔离最后价格:

close <- cbind(Cl(GOOG),Cl(FB))

现在我想在非常好的'TTR'包中使用一些工具,例如SMA

smacheck <- SMA(close,50)
Error in `colnames<-`(`*tmp*`, value = c("GOOG.Close.SMA.50", "FB.Close.SMA.50":
  length of 'dimnames' [2] not equal to array extent

FB的历史记录短于GOOG。无论NA什么时候开始,我如何让这两种股票一起工作?

2 个答案:

答案 0 :(得分:3)

这与缺失的值无关。 SMA目前不适用于具有多个列的对象。您需要分别在每列上运行SMA

library(quantmod)
e <- new.env()
getSymbols('GOOG;FB', from='2000-01-01', env=e)
smacheck <- do.call(merge, eapply(e, function(x) SMA(Cl(x), 50)))

答案 1 :(得分:1)

您可以使用apply功能

SMAs <- xts(apply(close, MARGIN = 2, FUN = "SMA", n = 50), index(close))
head(SMAs)
##            GOOG.Close FB.Close
## 2004-08-19         NA       NA
## 2004-08-20         NA       NA
## 2004-08-23         NA       NA
## 2004-08-24         NA       NA
## 2004-08-25         NA       NA
## 2004-08-26         NA       NA

tail(SMAs)
##            GOOG.Close FB.Close
## 2013-10-29   899.6198  46.7544
## 2013-10-30   902.9198  46.9664
## 2013-10-31   906.1448  47.2042
## 2013-11-01   909.2114  47.4282
## 2013-11-04   912.3294  47.5816
## 2013-11-05   915.4320  47.7570