从固定起点(和按组)开始的滚动平均值

Rolling Mean from fixed starting point (and by Group)

假设您有以下数据框:

set.seed(100)
Pts <- floor(runif(20, 0, 10))
Individual <- c(rep("Adam",5), rep("Ben",5), rep("Charlie",5), rep("Daisy",5))
Date <- c(rep(seq(as.Date("2015-01-01"), as.Date("2015-01-05"), "days"), 4))
RollMean <- rep(NA,20)

df <- data.frame(Pts, Individual, Date, RollMean)

我想计算每行 Pts 的 RollMean 平均值,按个人计算,但只包括最早日期和当前行日期之间的条目。

例如:

df$RollMean[3] = (5+2+3)/3
df$RollMean[4] = (5+2+3+0)/4
df$RollMean[7] = (8+4)/2

我试过使用 TTR 包中的 SMA() 等函数,然后使用 ave 按组排序,例如:

df$RollMean <- ave(df$Pts, df$Individual, FUN= function(x) SMA(x, n))

但是我必须预先指定 n 根据 R 正在处理的行进行更改。

我可以使用什么代码来生成我正在寻找的 Rolling Means?

你可以试试:

library(data.table)

setDT(df)[,cumsum(Pts[order(Date)])/seq(.N), Individual]

这里有几个备选方案:

1)这不使用任何包:

transform(df, Rollmean = ave(Pts, Individual, FUN = function(x) cumsum(x) / seq_along(x)))

2) 另一种方法是使用动物园的 rollmeanr 和宽度向量:

library(zoo)
Rollmean <- function(x) rollapplyr(x, seq_along(x), mean))
transform(df, Rollmean = ave(Pts, Individual, FUN = Rollmean)