根据R中的名称总结特定行并创建新列

时间:2013-04-26 17:50:36

标签: r

这可能是一个容易回答的问题,但我还没能找到解决方案。

假设我有以下数据框:

    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

提前感谢您对此问题的任何帮助。

2 个答案:

答案 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基函数aggregatebysplit