标题可能不太清楚,因为很难用几句话概括问题,尽管我认为问题不那么难解决。为了解释这个问题,让我共享一个数据框以供引用:
head(df, n = 10)
team score
1 A 10
2 A 4
3 A 10
4 A 16
5 A 20
6 B 5
7 B 11
8 B 8
9 B 16
10 B 5
我想添加第三列,该列计算每个团队的平均得分,随着我在每个团队的行中向下移动时,平均得分会更新,然后在新团队中重置。例如,我希望的输出列如下所示:
head(df, n = 10)
team score avg_score
1 A 10 10
2 A 4 7
3 A 10 8
4 A 16 10
5 A 20 12
6 B 5 5
7 B 11 8
8 B 8 8
9 B 16 10
10 B 5 9
# row1: 10 = 10
# row2: 7 = (10 + 4)/2
# row3: 8 = (10 + 4 + 10)/3
# ...
使用以下模式,并为新团队重新开始计算。
谢谢,
最佳答案
library("data.table")
setDT(df)[, `:=` (avg_score = cumsum(score)/1:.N), by = team]
或根据@snoram的评论更具可读性
setDT(dt)[, avg_score := cumsum(score)/(1:.N), by = team]
# team score avg_score
# 1: A 10 10
# 2: A 4 7
# 3: A 10 8
# 4: A 16 10
# 5: A 20 12
# 6: B 5 5
# 7: B 11 8
# 8: B 8 8
# 9: B 16 10
# 10: B 5 9
关于R-计算从顶行到底行的数据框列的平均值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39110618/