使用R连续cbind-ed每日和每周数据?

时间:2016-08-16 13:13:32

标签: r aggregation xts quantmod

我想连续绑定每日和每周数据(没有NA)我为此目的使用此代码,但我有两个问题。

library(quantmod)
aapl=getSymbols("AAPL",from="2015-01-01",auto.assign=F)
d_aapl=Cl(aapl)/Op(aapl)
head(d_aapl)
w_aapl=to.weekly(d_aapl)

head(w_aapl)
res=cbind(d_aapl,Cl(w_aapl))
head(res,8)

第一个问题是w_aapl=to.weekly(d_aapl)逻辑上它应该只对to.weekly变量执行d_aapl功能,但是它会对除了音量和调整后的所有列执行它。这里发生了什么?

           d_aapl.Open d_aapl.High d_aapl.Low d_aapl.Close
2015-01-02   0.9815064   0.9815064  0.9815064    0.9815064
2015-01-09   0.9811617   1.0243522  0.9811617    0.9941422
2015-01-16   0.9702487   1.0069699  0.9702487    0.9902831
2015-01-23   1.0081603   1.0194087  1.0055072    1.0060552
2015-01-30   0.9943731   1.0221802  0.9708237    0.9895270
2015-02-06   1.0049131   1.0089451  0.9909182    0.9909182

第二个问题是输出res。在列绑定之后,我预计有些日子会填充NA,而不是NA我想使用以前的数据

curren result
           AAPL.Close d_aapl.Close
2015-01-02  0.9815064    0.9815064
2015-01-05  0.9811617           NA
2015-01-06  0.9973719           NA
2015-01-07  1.0051306           NA
2015-01-08  1.0243522           NA
2015-01-09  0.9941422    0.9941422
2015-01-12  0.9702487           NA
2015-01-13  0.9891412           NA

wanted

            AAPL.Close d_aapl.Close
2015-01-02  0.9815064   0.9815064
2015-01-05  0.9811617   0.9815064
2015-01-06  0.9973719   0.9815064
2015-01-07  1.0051306   0.9815064
2015-01-08  1.0243522   0.9815064
2015-01-09  0.9941422   0.9941422
2015-01-12  0.9702487   0.9941422
2015-01-13  0.9891412   0.9941422

怎么做?

1 个答案:

答案 0 :(得分:1)

您第一个问题的实际答案,其中您询问发生了什么:w_aapl=to.weekly(d_aapl)只是每周返回您的每日d_aapl时间序列(这是一个单变量系列)的OHLC虽然每周数据的前几行(和最后几行)可能不那么明确,但规模很大。 (在您的问题中,它与调整后的价格或数量无关。)

w_aapl中的时间戳对应于默认情况下每周聚合中的最后一个可用日期(如果您希望将时间戳更改为开始时,请阅读?to.period的{​​{1}}参数这一周,但这是回答你的问题的一个侧面),每周从周一到周日(星期一的数据是下周的第一天)。

由于周末没有数据,您的时间戳将是每周的最后一个星期五(但如果包含星期日数据则为星期日)。也许这有助于了解正在发生的事情:

indexAt

专门针对您的数据,每行将从周一到周五获取数据,并指定星期五的时间戳:

  • 第一个每周数据条目class(coredata(d_aapl)) <- "character" v <- xts(order.by = index(d_aapl), x = weekdays(index(d_aapl)), dimnames = list(NULL, "Weekday")) head(merge(d_aapl, v), 20) # AAPL.Close Weekday # 2015-01-02 "0.981506445654964" "Friday" # 2015-01-05 "0.981161686386908" "Monday" # 2015-01-06 "0.997371888517253" "Tuesday" # 2015-01-07 "1.00513062514358" "Wednesday" # 2015-01-08 "1.02435224688221" "Thursday" # 2015-01-09 "0.994142220540378" "Friday" # 2015-01-12 "0.970248685084346" "Monday" # 2015-01-13 "0.989141173831105" "Tuesday" # 2015-01-14 "1.00696993757364" "Wednesday" # 2015-01-15 "0.971090909090909" "Thursday" # 2015-01-16 "0.990283088762806" "Friday" # 2015-01-20 "1.00816028405639" "Tuesday" # 2015-01-21 "1.00550716857753" "Wednesday" # 2015-01-22 "1.01940867006333" "Thursday" # 2015-01-23 "1.00605520909915" "Friday" # 2015-01-26 "0.994373131604943" "Monday" # 2015-01-27 "0.97082370522725" "Tuesday" # 2015-01-28 "0.980277148183554" "Wednesday" # 2015-01-29 "1.02218020976616" "Thursday" # 2015-01-30 "0.989527044095827" "Friday" 是一个特殊情况,它采用2015-01-02(星期一)到2014-12-29(星期日)之间的值,这只是周五的一个值2015-01-04(这就是为什么OHLC = C为第一周的酒吧)。
  • 2015-01-02行的数据将从2015-01-09d_aapl之间的2015-01-05获取。您可以看到高2015-01-112015-01-08的低点,开放是范围中的第一个值2015-01-05,关闭2015-01-05的值
  • 2015-01-09的数据将从2015-01-16d_aapl2015-01-12获取....

关于您的第二个问题,已提供的其他答案效果很好,但您也可以考虑查看2015-01-18及其?merge.xts参数,在某些情况下更简洁:fill