按多列进行分组并合计其他多列

我有一个约200列的数据框,其中我想表前十组左右,这是因素和总结其余的列。

我列出了所有想要分组的列名以及我想要聚合的所有列的列表。

我正在寻找的输出格式需要是具有相同col数的相同dataframe,只是分组在一起。

有使用包data.tableplyr或其他的解决scheme吗?

data.table的方法是:

 DT[, lapply(.SD,sum), by=list(col1,col2,col3,...)] 

要么

 DT[, lapply(.SD,sum), by=colnames(DT)[1:10]] 

其中.SD是(D)ata的(S)ubset, 不包括组列。 (另外:如果您需要一般参考组列,他们在.BY 。)

这似乎是一个ddply的任务(我使用“plyr”包含的“棒球”数据集):

 library(plyr) groupColumns = c("year","team") dataColumns = c("hr", "rbi","sb") res = ddply(baseball, groupColumns, function(x) colSums(x[dataColumns])) head(res) 

这给每个groupColumns在dataColumns中指定的列的总和。

在基地R这将是…

 aggregate( as.matrix(df[,11:200]), as.list(df[,1:10]), FUN = sum) 

编辑 :自从我写这个聚合函数已经走了很长一段路。 没有一个上面的铸造是必要的。

 aggregate( df[,11:200], df[,1:10], FUN = sum ) 

有很多种方法来写这个。 假设前10列被命名为a1a10我喜欢以下内容,即使它是详细的。

 aggregate(. ~ a1 + a2 + a3 + a4 + a5 + a6 + a7 + a8 + a9 + a10, data = dat, FUN = sum) 

(你可以使用粘贴构build公式和使用formula

使用plyr :: ddply:

 library(plyr) ddply(dtfr, .(name1, name2, namex), numcolwise(sum)) 

dplyr方式是:

 library(dplyr) df %>% group_by(col1, col2, col3) %>% summarise_each(funs(sum)) 

您可以通过使用?dplyr::select帮助文件中提到的特殊function来进一步指定要汇总或从summarise_each中排除的列。

使用data.table的简单和正确的方法,您可以select和取消select任何您想要进行分组和data.table列:

DT[, lapply(.SD,sum), by= eval( colnames( DT[,c(1,2,3:10),with=F][,-c(7,8),with=F] ) ) , .SDcols=colnames( DT[,c(100:200),with=F][,-c(10:20),with=F] ) ]