我有四年数据的时间序列。我想在几个月内做一个for循环操作。我正在使用'xts'包。这就是我的原始数据框('obs')的前四行看起来像
t V2 V3 V4 V5 V6 V7 V8 V9
1 2009-09-25 18:00:00 32.965 32.965 33.525 32.965 32.965 32.965 32.965
2 2009-09-26 06:00:00 32.965 32.965 32.965 32.965 31.853 32.407 31.301
3 2009-09-26 18:00:00 31.853 31.853 31.853 32.407 31.301 30.752 31.301
4 2009-09-27 06:00:00 29.687 29.194 30.752 28.707 27.750 27.279 27.279
首先,我使用
将数据系列拆分为月度数据obsl <- split(obs, f = "months", drop=FALSE, k = 1)
现在我在列表中列出了所有月度数据系列。我想使用obsl [i]'i'作为'i'月份列表来调用每个月度列表,并将此列表转换为月度数据系列的矩阵。 敌人,例如这是obsl [2]的输出,它是一个列表
V2 V3 V4 V5 V6 V7 V8 V9
2009-10-01 06:00:00 25.900 25.900 25.900 26.355 26.814 25.900 25.900 25.451
2009-10-01 18:00:00 25.900 25.900 25.900 25.007 25.007 25.007 25.900 25.451
2009-10-02 06:00:00 25.007 25.007 25.007 25.007 25.007 25.007 25.007 25.007
2009-10-02 18:00:00 25.007 25.007 25.007 25.007 25.900 25.007 24.136 24.569
2009-10-31 18:00:00 36.950 37.531 38.115 38.702 39.884 40.480 41.681 42.286
但我不确定这是否是正确而优雅的方式。另外我不知道如何将列表转换为具有原始矩阵形式的矩阵(即第一列时间戳和其余 - 数字)。有人可以帮忙吗?
答案 0 :(得分:0)
要从list
个xts
个对象转到单个xts
个对象,您可以使用do.call(rbind, ...)
成语
obs <- getSymbols("SPY", from="2013-01-01", to="2013-12-31", src="yahoo", auto.assign=FALSE)
obsl <- split(obs, "months")
do.call(rbind, obsl)
最后一行相当于rbind(obsl[[1]], obsl[[2]], ..., obsl[[12]])
如果这太慢,您可以尝试do.call.rbind
library(qmao) # R-Forge
do.call.rbind(obsl)