如何在保留R中的其他列的同时聚合一些列?

时间:2013-04-12 19:04:24

标签: r aggregate

我有一个这样的数据框:

     id  no  age
1    1   7   23
2    1   2   23
3    2   1   25
4    2   4   25
5    3   6   23
6    3   1   23

我希望通过id将日期框架汇总到这样的表单:(如果他们共享同一个no,只需汇总id,但请保留age有)

    id  no  age
1    1   9   23
2    2   5   25
3    3   7   23

如何使用R来实现这一目标?

3 个答案:

答案 0 :(得分:17)

假设您的数据框名为df

aggregate(no~id+age, df, sum)
#   id age no
# 1  1  23  9
# 2  3  23  7
# 3  2  25  5

答案 1 :(得分:5)

更好,data.table

library(data.table)
# convert your object to a data.table (by reference) to unlock data.table syntax
setDT(DF)
DF[  , .(sum_no = sum(no), unq_age = unique(age)), by = id]

答案 2 :(得分:4)

或者,您可以使用plyr包中的ddply

require(plyr)
ddply(df,.(id,age),summarise,no = sum(no))

在这个特定的例子中,结果是相同的。然而,情况并非总是如此,两个函数之间的差异概述为here。这两个功能都有它们的用途,值得探索,这就是为什么我觉得应该提到这个替代方案。