R将季度数据与季度的第一个日期合并为指数

时间:2014-01-09 15:38:10

标签: r quantmod

我可以从每日时间序列生成季度OHLC日期:

library(quantmod)
getSymbols("SPY", from="2000-01-01", to=Sys.Date())
tail(SPY)
dfQ <- to.quarterly(SPY[,6])
tail(dfQ)

我也可以生成季度平均值:

dfmean1 <- apply.quarterly(xts(SPY[,6]), FUN = mean)
tail(dfmean1)

但是我在合并这两者时遇到了问题,其中一个索引显示了该季度的第一个日期(而不是该季度的最后一个日期)。

感谢您的帮助

1 个答案:

答案 0 :(得分:1)

我想你在这里有两个问题。第一个是如何在OHLC季度数据中使用平均列。第二个是如何为每个季度的开头设置日期戳,而不是“最后”的日期戳。 xts / quantmod包假设您需要“最后”的日期戳,因此请使用流程,并在结尾处替换日期戳。

为了与OHLC有意义,我发现自己最好只进行OHLC计算。因此,不要将mean传递给apply.quarterly(),而是执行此操作:

bars = apply.quarterly(xts(SPY[,6]), FUN = function(x){
  d=coredata(x);
  c(first(d),max(d),min(d),last(d),mean(d))
  } )
colnames(bars)=c("open","high","low","close","mean")

这给出了:

...
2013-09-30 159.71 171.28 159.56 167.10 165.9822
2013-12-31 168.43 184.69 164.59 184.69 176.1416
2014-01-08 182.92 183.52 182.36 183.52 183.0340

然后修复日期戳:

index(bars) = as.Date(as.yearqtr(index(bars)))

要理解这一点,请先查看index(bars),然后查看as.yearqtr(index(bars)),其中包含:

[1] "2000 Q1" "2000 Q2" "2000 Q3" ...
   ... "2013 Q3" "2013 Q4" "2014 Q1"

然后,幸运的是,as.Date()会为您提供每个季度开始的日期戳。

最后一点是将新索引分配回bars对象index(bars) = ...(或index(bars) <- ...,如果您愿意)。


顺便说一句,您可以为indexAt="lastof"提供indexAt="firstof"to.quarterly()参数。试验一下,但在我的测试中它不够用。