【问题标题】:rollapply with "growing" windowrollapply 与“成长”窗口
【发布时间】:2011-06-17 07:49:55
【问题描述】:

伙计们,通常当您执行以下操作时:

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 循环更好的方法来做到这一点?

【问题讨论】:

    标签: r zoo


    【解决方案1】:

    rollapply in zoo 可以通过指定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
    

    【讨论】:

    • 似乎rollapply 函数定义已更改。函数调用现在应该看起来像 - rollapply(1:20, 3, FUN = sum, align="right", partial = TRUE)
    【解决方案2】:

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

    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)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-10-20
      • 1970-01-01
      • 2021-08-01
      • 1970-01-01
      • 2013-08-29
      • 1970-01-01
      相关资源
      最近更新 更多