基于R中另一列的数据框中的逐步列总和

Stepwise column sum in data frame based on another column in R

我有一个这样的数据框:

Team GF
A 3
B 5
A 2
A 3
B 1
B 6

寻找这样的输出(只是一个额外的列):

Team x avg(X)
A 3 0
B 5 0
A 2 3
A 3 2.5
B 1 5
B 6 3

avg(x) 是 x 的所有先前实例的平均值,其中 Team 相同。我有以下获取总体平均值的 R 代码,但我正在寻找“逐步”平均值。

    new_df <- df %>% group_by(Team) %>% summarise(avg_x = mean(x))

有没有办法在每次“迭代”时仅评估前几行的同时对其进行矢量化?

您想要 dplyr 中的 cummean() 函数,结合 lag():

df %>% group_by(Team) %>% mutate(avg_x = replace_na(lag(cummean(x)), 0))

生成以下内容:

# A tibble: 6 × 3
# Groups:   Team [2]
  Team      x avg_x
  <chr> <dbl> <dbl>
1 A         3   0
2 B         5   0
3 A         2   3
4 A         3   2.5
5 B         1   5
6 B         6   3

根据需要。

编辑 1:

正如 @Ritchie Sacramento 所指出的,以下内容更清晰:

df %>% group_by(Team) %>% mutate(avg_x = lag(cummean(x), default = 0))