按r中的标准求和值

时间:2013-09-26 20:03:54

标签: r

我一直在努力做到这一点,但我无法找到正确的方法来解决这个问题。假设我有一些看起来像这样的数据:

hhid   totalplacevisited
1              5
1              6
1              2
2              2
2              4
3              1  

如何汇总数据,以便我可以获得这种格式的值:

hhid   totalplacevisited   totalplacedvisitedbyhh
1              5                    13
1              6                    13
1              2                    13
2              2                    6
2              4                    6 
3              1                    1

3 个答案:

答案 0 :(得分:1)

另一种方法是使用ave

> transform(df, totalplacedvisitedbyhh = with(df,ave(totalplacevisited, hhid, FUN=sum)))
  hhid totalplacevisited totalplacedvisitedbyhh
1    1                 5                     13
2    1                 6                     13
3    1                 2                     13
4    2                 2                      6
5    2                 4                      6
6    3                 1                      1

其他替代方法是使用data.table

> library(data.table)
> DT <- data.table(df)
> DT[, totalplacedvisitedbyhh := sum(totalplacevisited), by=hhid]
> DT
   hhid totalplacevisited totalplacedvisitedbyhh
1:    1                 5                     13
2:    1                 6                     13
3:    1                 2                     13
4:    2                 2                      6
5:    2                 4                      6
6:    3                 1                      1

答案 1 :(得分:1)

data.table包是最快的方式:

dt = data.table(df)
dt[,totalplacesvisitedbyhh:=sum(totalplacevisited),by=hhid]

答案 2 :(得分:0)

以下是plyr包的解决方案

library(plyr)
ddply(mydf,.(hhid),transform, totalplacedvisitedbyhh=sum(totalplacevisited))

 hhid totalplacevisited totalplacedvisitedbyhh
1    1                 5                     13
2    1                 6                     13
3    1                 2                     13
4    2                 2                      6
5    2                 4                      6
6    3                 1                      1