dplyr可以汇总几个variables而不列出每个variables吗?

dplyr是惊人的快,但我不知道我是否缺less的东西:是否有可能总结了几个variables。 例如:

library(dplyr) library(reshape2) (df=dput(structure(list(sex = structure(c(1L, 1L, 2L, 2L), .Label = c("boy", "girl"), class = "factor"), age = c(52L, 58L, 40L, 62L), bmi = c(25L, 23L, 30L, 26L), chol = c(187L, 220L, 190L, 204L)), .Names = c("sex", "age", "bmi", "chol"), row.names = c(NA, -4L), class = "data.frame"))) sex age bmi chol 1 boy 52 25 187 2 boy 58 23 220 3 girl 40 30 190 4 girl 62 26 204 dg=group_by(df,sex) 

有了这个小的数据框,写起来很容易

 summarise(dg,mean(age),mean(bmi),mean(chol)) 

而且我知道,为了得到我想要的东西,我可以融化,获得手段,然后播种

 dm=melt(df, id.var='sex') dmg=group_by(dm, sex, variable); x=summarise(dmg, means=mean(value)) dcast(x, sex~variable) 

但是,如果我有> 20个variables和大量的行。 在data.table中有没有类似于.SD的东西,可以让我采取分组数据框中所有variables的方法? 或者,有可能以某种方式在分组的dataframe上使用lapply?

感谢您的帮助

data.table成语是lapply(.SD, mean) ,也就是

 DT <- data.table(df) DT[, lapply(.SD, mean), by = sex] # sex age bmi chol # 1: boy 55 24 203.5 # 2: girl 51 28 197.0 

我不确定同一个东西的dplyr习语,但你可以做类似的事情

 dg <- group_by(df, sex) # the names of the columns you want to summarize cols <- names(dg)[-1] # the dots component of your call to summarise dots <- sapply(cols ,function(x) substitute(mean(x), list(x=as.name(x)))) do.call(summarise, c(list(.data=dg), dots)) # Source: local data frame [2 x 4] # sex age bmi chol # 1 boy 55 24 203.5 # 2 girl 51 28 197.0 

请注意,在dplyr中有一个github问题#178有效地实现了plyr成语。

dplyr现在有了dplyr

 df %>% group_by(sex) %>% summarise_each(funs(mean))