基于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))
我有一个这样的数据框:
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))