-1

我一直在努力解决这个问题,但我找不到解决这个问题的正确方法。可以说我有一些看起来像这样的数据:

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
4

3 回答 3

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
于 2013-09-26T20:08:58.603 回答
1

data.table打包是最快的方式:

dt = data.table(df)
dt[,totalplacesvisitedbyhh:=sum(totalplacevisited),by=hhid]
于 2013-09-26T20:09:11.697 回答
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
于 2013-09-26T20:22:52.473 回答