【发布时间】:2012-08-14 19:26:20
【问题描述】:
我熟悉zoo 函数rollapply,它允许您对zoo 或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)] })
肯定有更好的方法可以更快地做到这一点,不是吗? 澄清一下:我想使用重叠的时间段,只是应该每月进行一次滚动。
【问题讨论】: