0

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

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

非常感谢约翰

4

2 回答 2

6

1) rollapplyr ( width2nd arg) 可以是一个宽度向量,所以如果x是某个输入向量并且f是某个合适的函数,那么:

rollapplyr(x, seq_along(x), f)

例如,如果f是,sum则上述与 相同cumsum(x),如果fmax,则上述与 相同cummax(x)

Achim 指出这也有效:

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

2)Reduce以上可能是您想要的,但是,对于某些函数(它们必须接受两个参数并且迭代应用程序必须适合作为最终答案)我们可以Reduce在 R 的基础上使用。例如,cumsum对应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

所以总而言之Reduce,仅在某些受限情况下有效。

于 2014-11-28T14:46:53.083 回答
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)
于 2014-11-28T14:26:55.493 回答