我熟悉zoo
功能rollapply
它允许您进行滚动计算zoo
or xts
对象,您可以通过指定滚动增量by
范围。我特别感兴趣的是每月应用一个函数,但在计算中使用过去的所有每日数据。例如,假设我的数据集如下所示:
dte, val
1/01/2001, 10
1/02/2001, 11
...
1/31/2001, 2
2/01/2001, 54
2/02/2001, 34
...
2/30/2001, 29
我想选择每个月底apply
使用所有日常数据的函数。这似乎不适用于rollapply
自从by
有时争论会是 30,其他月份是 29,等等。我目前的想法是:
f <- function(xts_obj) { coef(lm(a ~ b, data=as.data.frame(xts_obj)))[1] }
month_end <- endpoints(my_xts, on="months", k=1)
rslt <- apply(month_end, 1, function(idx) { my_xts[paste0("/",idx)] })
当然有更好的方法可以更快,不是吗?
澄清一下:我想使用重叠期间,只是滚动应该每月进行一次。