我正在尝试弄清楚如何在数据窗口上使用R rollapply,该窗口从数据开始累积扩展。
在时间t时,滚动应用应使用1:t范围内的数据。在time t+1中,应该使用1:t+1,依此类推。
约翰,非常感谢
发布于 2014-11-28 14:46:53
1) rollapplyr width
(第二个参数)可以是一个宽度的向量,所以如果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) Reduce上面可能是你想要的,但是,对于某些函数(它们必须接受两个参数,迭代应用程序必须适合作为最终答案),我们可以在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
因此,总而言之,Reduce
只能在某些受限的情况下工作。
发布于 2014-11-28 14:26:55
如果需要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)
https://stackoverflow.com/questions/27190604
复制