我希望创建一个累积平均值,它可以在多个组之间进行带有滞后的平均。这是为了预测分析,所以我希望每一行都是它之前所有行的累积平均值(不包括它自己的值)。
这是从Grouped moving average in r开始的一个跟进。
我相信可以使用rollapply和ave来实现这个目标,我已经使用下面的代码使用各种移动窗口实现了这个结果(只是不是累积平均值)。
以下是所需的输出:
这是从Grouped moving average in r开始的一个跟进。
我相信可以使用rollapply和ave来实现这个目标,我已经使用下面的代码使用各种移动窗口实现了这个结果(只是不是累积平均值)。
library(zoo)
roll <- function(x, n) {
if (length(x) <= n) NA
else rollapply(x, list(-seq(n)), mean, fill = NA)
}
transform(DF, AVG2 = ave(Goals, Player, FUN = function(x) roll(x, 2)),
AVG3 = ave(Goals, Player, FUN = function(x) roll(x, 3)))
以下是所需的输出:
Player Goals **AVG**
S 5
S 2 5
S 7 3.5
O 3
O 9 3
O 6 6
O 3 6
S 7 4.66
O 1 5.25
S 7 5.25
S 3 5.6
Q 8
S 3 5.16
O 4 4.4
P 1
S 9 4.857
S 4 5.375
Z 6
S 3 5.22
O 8 4.33
S 3 5
O 4 4.857
O 1 4.75
S 9 4.81
S 4 5.16
O 6 4.33
J 6
以下是在R中重新创建初始表格的代码:
Player <- c('S','S','S','O','O','O','O','S','O','S','S','O','S','O','O','S','S','O','S','O','S','O','O','S','S','O','J')
Goals <- c(5,2,7,3,9,6,3,7,1,7,3,8,3,4,1,9,4,6,3,8,3,4,1,9,4,6,6)
data.frame(Player, Goals)
非常感谢任何帮助
ave
函数,您想要的函数似乎是function(x) c(NA, (cumsum(x) / seq_along(x))[-length(x)])
。 - alexis_laz