0

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

假设我有以下数据框:

    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

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

4

2 回答 2

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))
于 2013-04-26T18:22:54.680 回答
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.

于 2013-04-26T17:52:25.270 回答