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

Nip*_*Nip 11 aggregate r

我有一个这样的数据框:

     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
Run Code Online (Sandbox Code Playgroud)

我希望将日期框架汇总id到这样的形式:(只需将no它们共享,如果它们共享相同id,但保留age在那里)

    id  no  age
1    1   9   23
2    2   5   25
3    3   7   23
Run Code Online (Sandbox Code Playgroud)

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

Did*_*rts 18

假设您的数据框已命名df.

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

  • 这在您添加更多列时不起作用,它将 RHS 上的每一列视为要分组的因素列,因此例如,如果您为每个条目包含一个带有 not 的额外列,您最终会得到许多重复的行作为结果 (2认同)
  • 如果每个 id 的年龄不一致,我们只想要第一个年龄怎么办? (2认同)

Mic*_*ico 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]
Run Code Online (Sandbox Code Playgroud)

  • 公平,但我的意思是更好,因为这可能会让你开始使用`data.table`,如果是不可估量的红利;-) (2认同)