我正在尝试以累积方式将 xts 时间序列数据转换为较低的周期性。
例如,对 xts 包中的示例数据(sample_matrix)使用 to.weekly 我得到:
library(xts)
data(sample_matrix)
to.weekly(as.xts(sample_matrix), name="")
> to.weekly(as.xts(sample_matrix), name="")
.Open .High .Low .Close
2007-01-08 50.03978 50.42188 49.95041 49.98806
2007-01-15 49.99489 50.68583 49.80454 50.48912
.....
我希望能够使用稍微不同的函数 to.weekly.cumulative 来返回:
> to.weekly.cumulative(as.xts(sample_matrix), name="")
.Open .High .Low .Close
2007-01-02 50.03978 50.11778 49.95041 50.11778
2007-01-03 50.03978 50.42188 49.95041 50.39767
2007-01-04 50.03978 50.42188 49.95041 50.33236
2007-01-05 50.03978 50.42188 49.95041 50.33459
2007-01-06 50.03978 50.42188 49.95041 50.18112
2007-01-07 50.03978 50.42188 49.95041 49.99185
2007-01-08 50.03978 50.42188 49.95041 49.98806
2007-01-09 49.99489 49.99489 49.80454 49.91333
2007-01-10 49.99489 50.13053 49.80454 49.97246
2007-01-11 49.99489 50.23910 49.80454 50.23910
2007-01-12 49.99489 50.35980 49.80454 50.28519
2007-01-13 49.99489 50.48000 49.80454 50.41286
2007-01-14 49.99489 50.62395 49.80454 50.60145
2007-01-15 49.99489 50.68583 49.80454 50.48912
....
此函数不会仅返回端点的数据,而是返回 xts 对象中的所有行的数据。例如,我想要从每日柱中获取每周柱(或从 1 分钟柱中获取 15 分钟柱),这样每天(或每分钟)我都会获得当前(从当天/分钟开始)的发展情况每周(15 分钟)柱的时间。因此,在周一,我将得到与周一完全相同的每周开盘价、最高价、最低价、收盘价,周二开盘价将从周一开始,收盘价将从周二开始,如果高于周一高价,则最高价将是周二高价如果低于周一低点,低点就是周二低点……周五我会从周一开始开盘,高点为整周的高点,低点为整周的低点,周五收盘。如果我使用 xts 中的 to.weekly 函数,周五的数据应该是相同的。
因此,基本上,这不仅仅是端点处的数据(如 xts to.weekly 所做的那样),而是原始 xts 对象的周期性可用的所有时间步长。所以不知怎的,一部关于每周酒吧几天发展的电影(每天我都会得到每周酒吧在每周结束时的位置)。
如何做到这一点(如何编写函数 to.weekly.cumulative?)?
有关如何做到这一点的示例受到高度赞赏。
编辑:尝试根据 DWin 评论进行更多解释。