这可能是一个容易回答的问题,但我还没能找到解决方案。
假设我有以下数据框:
Name Value
Bob 100
Bob 500
Jim 50
Rach 300
Rach 300
Rach 300
我需要创建一个新列,为每个人添加值。最终结果应如下所示:
Name Value Sum
Bob 100 600
Bob 500 600
Jim 50 50
Rach 300 900
Rach 300 900
Rach 300 900
提前感谢您对此问题的任何帮助。
答案 0 :(得分:3)
另一个简单的解决方案是:
dat <- data.frame(Name = c('Bob', 'Bob', 'Jim', 'Rach', 'Rach', 'Rach'),
Value = c(100, 500, 50, 300, 300, 300))
transform(dat, sum_name = ave(Value, Name, FUN = sum))
答案 1 :(得分:1)
plyr
是你的朋友:
library(plyr)
ddply(dat, .(Name), transform, sum_name = sum(Value))
Name Value sum_name
1 Bob 100 600
2 Bob 500 600
3 Jim 50 50
4 Rach 300 900
5 Rach 300 900
6 Rach 300 900
假设您的数据位于data.frame
dat
。对于其他可能的解决方案,请查看data.table
包和R基函数aggregate
,by
,split
。