我试图弄清楚如何在数据窗口上使用R rollapply,该数据窗口从数据的开头累积扩展。
在时间t,roll apply应使用1:t范围内的数据。在时间t + 1,它应该使用1:t + 1,依此类推。
非常感谢 约翰
答案 0 :(得分:6)
1)rollapplyr width
(第2个arg)可以是宽度向量,所以如果x
是某个输入向量而f
是一些合适的函数然后:
rollapplyr(x, seq_along(x), f)
例如,如果f
为sum
,则上述内容与cumsum(x)
相同,如果f
为max
,则上述内容与cummax(x)
。
Achim指出这也有效:
rollapplyr(x, length(x), f, partial = TRUE)
2)减少以上可能是您想要的,但是,对于某些功能(它们必须接受两个参数,迭代应用必须适合作为最终答案),我们可以使用{{1在R的基础上。例如,Reduce
和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
仅适用于某些受限制的情况。
答案 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)