rollapply 与“增长”窗户

发布于 2024-10-15 04:37:06 字数 345 浏览 4 评论 0原文

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

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

Guys, normally when you do something like:

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

Quite rightly rollapply will start calculating the value from the moment 10 elements are available.

Unfortunately I need something that uses as much data as possible for the fist 10 observations, essentially a growing window of data till there is enough data to use a sliding window, e.g. 1, 1:2, 1:3, 1:4, etc. till we have at least 10 elements and then slide the window as usual.

Is there a better way to do this than an ugly for loop?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

滿滿的愛 2024-10-22 04:37:07

动物园中的 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

rollapply in zoo can do that by specifying partial=TRUE, e.g.

> 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
唯憾梦倾城 2024-10-22 04:37:07

为什么不在开始时就用 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)

Why not just pad the series with 9 NAs at the beginning? Definitely better than "ugly for loops":

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)
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文