r 聚合数据框:一些列不变,一些列聚合
r aggregate dataframe: some columns unchanged, some columns aggregated
我试图查看有关聚合、应用等的手册,但我找不到示例,其中一些列被应用的函数跳过,而其他列按原样复制。示例:
> 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 正常聚合,例如总和()
- 和一个新列是基于早期聚合之一创建的...例如新列 = sum(val3)/sum(val2)?
我基本上想要:
> newdf
code val2 newcol
1 one 9 1.6666
2 two 6 1.5000
我想一步完成,而不是定义一个单独的函数来处理每一列/聚合。这可能吗?
分两步完成,关键是使用聚合函数。在 by() 参数中,您要指定聚合方式。本例按照"Code"中的值进行聚合。然后,只需指定感兴趣的函数即可添加第三列。
aggregate <- aggregate(olddf[, c("val2", "val3")], by = list(olddf$code), FUN = sum)
aggregate$newcol <- aggregate$val3/aggregate$val2
尝试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
我试图查看有关聚合、应用等的手册,但我找不到示例,其中一些列被应用的函数跳过,而其他列按原样复制。示例:
> 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 正常聚合,例如总和()
- 和一个新列是基于早期聚合之一创建的...例如新列 = sum(val3)/sum(val2)?
我基本上想要:
> newdf
code val2 newcol
1 one 9 1.6666
2 two 6 1.5000
我想一步完成,而不是定义一个单独的函数来处理每一列/聚合。这可能吗?
分两步完成,关键是使用聚合函数。在 by() 参数中,您要指定聚合方式。本例按照"Code"中的值进行聚合。然后,只需指定感兴趣的函数即可添加第三列。
aggregate <- aggregate(olddf[, c("val2", "val3")], by = list(olddf$code), FUN = sum)
aggregate$newcol <- aggregate$val3/aggregate$val2
尝试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