我有一个这样的数据框:
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来实现这一目标?
答案 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。这两个功能都有它们的用途,值得探索,这就是为什么我觉得应该提到这个替代方案。