rollapply累积窗口

时间:2014-11-28 14:17:47

标签: r rollapply

我试图弄清楚如何在数据窗口上使用R rollapply,该数据窗口从数据的开头累积扩展。

在时间t,roll apply应使用1:t范围内的数据。在时间t + 1,它应该使用1:t + 1,依此类推。

非常感谢 约翰

2 个答案:

答案 0 :(得分:6)

1)rollapplyr width(第2个arg)可以是宽度向量,所以如果x是某个输入向量而f是一些合适的函数然后:

rollapplyr(x, seq_along(x), f)

例如,如果fsum,则上述内容与cumsum(x)相同,如果fmax,则上述内容与cummax(x)

Achim指出这也有效:

rollapplyr(x, length(x), f, partial = TRUE)

2)减少以上可能是您想要的,但是,对于某些功能(它们必须接受两个参数,迭代应用必须适合作为最终答案),我们可以使用{{1在R的基础上。例如,Reducecumsum对应于:

cummmax

请注意,这些不会产生累积方式:

Reduce(`+`, x, accumulate = TRUE)
Reduce(max, x, accumulate = TRUE)

虽然这确实给出了累积均值:

Reduce(mean, x, accumulate = TRUE) # BAD
Reduce(function(x, y) (x+y)/2, x, accumulate = TRUE) # BAD

因此总结Reduce(`+`, x, accumulate = TRUE) / seq_along(x) # ok 仅适用于某些受限制的情况。

答案 1 :(得分:1)

如果您需要mean,可以尝试(使用base R个功能)

cumsum(v1)/seq_along(v1)
#[1] 4.0 3.0 3.0 2.5 3.0

sapply(seq_along(v1), function(i) mean(v1[1:i]))
#[1] 4.0 3.0 3.0 2.5 3.0

数据

 v1 <- c(4,2,3,1,5)