在data.frame中有数据,我想聚合一些列(使用任何一般函数)由其他人进行分组,保留其余列(或者甚至省略它们)。时尚是回忆group by
中的SQL
函数。举个例子,让我们假设我们有
df <- data.frame(a=rnorm(4), b=rnorm(4), c=c("A", "B", "C", "A"))
我希望将a
列中的值相加(比方说)并平均(比方说)列b
中的值,并按列c
中的符号进行分组。我知道有可能使用apply
,cbind
或类似物来实现,指定你想要使用的功能,但我想知道是否有更智能(一行)的方式(特别是使用aggregate
函数)这样做。
答案 0 :(得分:2)
很抱歉,但我并不了解如何处理多个专栏会使事情变得复杂。
library(data.table)
dt <- data.table(df)
dt[,.(sum_a = sum(a),mean_b= mean(b)),by = c]
答案 1 :(得分:1)
mapply(Vectorize(function(x, y) aggregate(
df[, x], by=list(df[, 3]), FUN=y), SIMPLIFY = F),
1:2, c('sum', 'mean'))