r聚合数据帧:某些列保持不变,某些列聚合

时间:2015-02-13 21:34:02

标签: r aggregate

我曾尝试查看聚合,应用等手册,但我找不到应用函数跳过某些列的示例,而其他列按原样复制。例如:

> olddf = data.frame(code=c("one","one","two"), val1=c(1,2,3), val2=c(4,5,6), val3=c(7,8,9))
> olddf
  code val1 val2 val3
1  one    1    4    7
2  one    2    5    8
3  two    3    6    9
> 

如何聚合olddf以便我获得一个新的数据框:

  • 代码保持原样
  • val1 已跳过
  • val2 正常汇总,例如的总和()
  • 新列 是根据早期聚合之一创建的...例如new column = sum(val3)/ sum(val2)?

我基本上想要:

> newdf
  code val2 newcol
1  one    9 1.6666
2  two    6 1.5000

我想一步完成,而不是定义一个单独的函数来处理每个列/聚合。这可能吗?

2 个答案:

答案 0 :(得分:2)

尝试data.table

library(data.table)
setDT(olddf)[, .(val2 = sum(val2),
                 newcol = sum(val3)/sum(val2)), by = code]
#    code val2   newcol
# 1:  one    9 1.666667
# 2:  two    6 1.500000

答案 1 :(得分:0)

您可以分两步完成此操作,关键是使用聚合函数。在by()参数中,您希望指定要聚合的方式。在这种情况下,根据“代码”中的值进行聚合。然后,仅通过指定感兴趣的函数来添加第三列。

aggregate <- aggregate(olddf[, c("val2", "val3")], by = list(olddf$code), FUN = sum)
aggregate$newcol <- aggregate$val3/aggregate$val2