我一直在努力做到这一点,但我无法找到正确的方法来解决这个问题。假设我有一些看起来像这样的数据:
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
答案 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