15

我有一个这样的数据框:

     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 实现这一目标?

4

3 回答 3

23

假设您的数据框名为df.

aggregate(no~id+age, df, sum)
#   id age no
# 1  1  23  9
# 2  3  23  7
# 3  2  25  5
于 2013-04-12T19:18:21.267 回答
7

更好的是,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]
于 2015-02-17T21:06:50.513 回答
4

或者,您可以使用ddplyplyr 包:

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

在此特定示例中,结果是相同的。但是,情况并非总是如此,此处概述了这两种功能之间的区别。这两个功能都有其用途,值得探索,这就是为什么我觉得应该提到这个替代方案。

于 2013-04-12T21:59:55.940 回答