按组R data.table进行滚动平均

Mid*_*eek 4 r data.table

我想从组中的第一行开始并在最后一行结束时按组计算YTD滚动平均值.以下示例......

Group <- c(rep("a",5), rep("b",5))
Sales <- c(2,4,3,3,5,9,7,8,10,11)
Result <- c(2,3,3,3,3.4,9,8,8,8.5,9)
df <- data.frame(Group, Sales, Result)
Run Code Online (Sandbox Code Playgroud)

结果列是我期望从滚动平均值中看到的.

nac*_*hti 13

使用cumsum:

dt <- as.data.table(df)
dt[, res := cumsum(Sales)/(1:.N), by = Group]
dt
    Group Sales Result res
 1:     a     2    2.0 2.0
 2:     a     4    3.0 3.0
 3:     a     3    3.0 3.0
 4:     a     3    3.0 3.0
 5:     a     5    3.4 3.4
 6:     b     9    9.0 9.0
 7:     b     7    8.0 8.0
 8:     b     8    8.0 8.0
 9:     b    10    8.5 8.5
10:     b    11    9.0 9.0
Run Code Online (Sandbox Code Playgroud)

rollapplyrzoo包装:

dt[, res := rollapplyr(Sales, 1:.N, mean), by = Group]
Run Code Online (Sandbox Code Playgroud)

或与基地R:

ave(df$Sales, df$Group, FUN = function(x) cumsum(x) / seq_along(x))
Run Code Online (Sandbox Code Playgroud)