gpt4 book ai didi

滚动申请 R 中的部分时间序列

转载 作者:行者123 更新时间:2023-12-04 16:48:25 24 4
gpt4 key购买 nike

给定

z <- zoo(c(1:10))

我希望能够聚合到以下内容:

> z
4 8 10
10 26 19

我已经使用 rollapply 尝试了以下但无济于事:

> rollapply(zoo(c(1:10)), width = 4, FUN = "sum", by = 4, partial = TRUE, align = "right")
1 5 9
1 14 30
> rollapply(zoo(c(1:10)), width = 4, FUN = "sum", by = 4, partial = TRUE, align = "left")
1 5 9
10 26 19
> rollapply(zoo(c(1:10)), width = 4, FUN = "sum", by = 4, partial = TRUE, align = "center")
1 5 9
6 22 27

如有任何帮助,我们将不胜感激。第二个看起来最有希望,但我必须自定义延迟?

最佳答案

partial 参数总是适用于两端;但是,可以通过为 width 参数使用向量来单独指定每个元素的宽度,然后自己对其进行子集化而不是使用 by:

library(zoo)

# inputs
z <- zoo(1:10)
k <- 4

n <- length(z)
w <- rep(1:k, length = n) # 1 2 3 4 1 2 3 4 1 2
ok <- w == k | seq(n) == n # F F F T F F F T F T

rollapplyr(z, w, sum)[ok]

给予:

 4  8 10 
10 26 19

2) 我们可以使用 align = "left" 然后修正时间(使用上面的 ok):

r <- rollapply(z, k, by = k, sum, partial = TRUE, align = "left")
time(r) <- time(z)[ok]

3) 这可以使用 aggregate.zoo 完成(使用上面的 ok):

tt <- na.locf(replace(time(z), !ok, NA), fromLast = TRUE)  # 4 4 4 4 8 8 8 8 10 10
aggregate(z, tt, sum)

关于滚动申请 R 中的部分时间序列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30292674/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com