假设我有一个数据框:
Col1 Col2 Col3 Val
a 1 a 2
a 1 a 3
a 1 b 5
b 1 a 10
b 1 a 20
b 1 a 25
我想在所有列中聚合,然后将其附加到我的数据框,以便我有这个输出:
Col1 Col2 Col3 Val Tot
a 1 a 2 10
a 1 a 3 10
a 1 b 5 10
b 1 a 10 55
b 1 a 20 55
b 1 a 25 55
我可以用tapply
来完成这项工作吗?我有点坚持最有效的方式。
答案 0 :(得分:4)
假设d
是您的数据框:
> d$Tot <- ave(d$Val, d$Col1, FUN = sum)
> d
Col1 Col2 Col3 Val Tot
1 a 1 a 2 10
2 a 1 a 3 10
3 a 1 b 5 10
4 b 1 a 10 55
5 b 1 a 20 55
6 b 1 a 25 55
答案 1 :(得分:4)
data.table
方法
library(data.table)
setDT(df)[, Tot := sum(Val), by = Col1]
dplyr
方法
library(dplyr)
df %>%
group_by(Col1) %>%
mutate(Tot = sum(Val))