是否有某种方法可以使用 rollapply(来自zoo
包或类似的东西)优化函数(rollmean
等rollmedian
)来计算具有基于时间的窗口的滚动函数,而不是基于多个观察值的滚动函数?我想要的很简单:对于不规则时间序列中的每个元素,我想计算一个具有 N 天窗口的滚动函数。也就是说,该窗口应包括当前观察前 N 天的所有观察。时间序列也可能包含重复项。
下面是一个例子。给定以下时间序列:
date value
1/11/2011 5
1/11/2011 4
1/11/2011 2
8/11/2011 1
13/11/2011 0
14/11/2011 0
15/11/2011 0
18/11/2011 1
21/11/2011 4
5/12/2011 3
具有 5 天窗口的滚动中位数,向右对齐,应导致以下计算:
> c(
median(c(5)),
median(c(5,4)),
median(c(5,4,2)),
median(c(1)),
median(c(1,0)),
median(c(0,0)),
median(c(0,0,0)),
median(c(0,0,0,1)),
median(c(1,4)),
median(c(3))
)
[1] 5.0 4.5 4.0 1.0 0.5 0.0 0.0 0.0 2.5 3.0
我已经找到了一些解决方案,但它们通常很棘手,这通常意味着缓慢。我设法实现了自己的滚动函数计算。问题在于,对于很长的时间序列,中位数(rollmedian)的优化版本可能会产生巨大的时间差异,因为它考虑了窗口之间的重叠。我想避免重新实现它。我怀疑rollapply参数有一些技巧可以使它起作用,但我无法弄清楚。在此先感谢您的帮助。