我想连续绑定每日和每周数据(没有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
怎么做?
答案 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-09
到d_aapl
之间的2015-01-05
获取。您可以看到高2015-01-11
,2015-01-08
的低点,开放是范围中的第一个值2015-01-05
,关闭2015-01-05
的值2015-01-09
的数据将从2015-01-16
到d_aapl
等2015-01-12
获取.... 关于您的第二个问题,已提供的其他答案效果很好,但您也可以考虑查看2015-01-18
及其?merge.xts
参数,在某些情况下更简洁:fill