rollapply与“成长”的窗口

时间:2011-01-28 15:28:51

标签: r zoo

伙计们,通常在你这样做的时候:

tmp = zoo(rnorm(100), 1:100)
rollapply(tmp, 10, function(x) quantile(x, 0.05), align="right")

非常正确rollapply将从10个元素可用时开始计算该值。

不幸的是,我需要的东西尽可能多地使用尽可能多的数据用于第10次观察,实质上是一个不断增长的数据窗口,直到有足够的数据来使用滑动窗口,例如: 1,1:2,1:3,1:4等等,直到我们至少有10个元素,然后像往常一样滑动窗口。

有没有比丑陋的for循环更好的方法呢?

2 个答案:

答案 0 :(得分:10)

动物园中的

rollapply可以通过指定partial=TRUE来实现,例如

> library(zoo)
> 
> rollapplyr(zoo(1:20), 3, sum, partial=TRUE)
 1  2  3  4  5  6  7  8  9 10 11 12 13 14 15 16 17 18 19 20 
 1  3  6  9 12 15 18 21 24 27 30 33 36 39 42 45 48 51 54 57

答案 1 :(得分:4)

为什么不在开头用9个NA填充系列?肯定比“丑陋的循环”更好:

tmp = zoo(c(rep(NA,9), rnorm(100)), 1:109)
zoo(rollapply(tmp, 10, function(x) quantile(x, 0.05, na.rm = TRUE), 
              align="right"), 1:100)