dplyr的速度惊人,但我想知道我是否遗漏了什么:是否有可能对几个变量进行总结.例如:

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)

But what if I have >20 variables and a very large number of rows. Is there anything similar to .SD in data.table that would allow me to take the means of all variables in the grouped data frame? Or, is it possible to somehow use lapply on the grouped data frame?

谢谢你的帮助

推荐答案

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

请注意,github发行版#178可以有效地实现dplyr中的plyr习惯用法colwise.

R相关问答推荐

R markdown beamer 演示返回未定义的控制序列

如果在订单中匹配代码之前删除行

量化跨膜序列中密码子的频率 - 应用功能?

如果超过 R 中的长度,则对向量进行子集并检索第一个元素

在嵌套列表中从第一个列表中选择第一个元素,从第二个列表中选择第二个元素,依此类推

如何仅在 R 管道 dplyr 中插入包含上述几行总和的数据帧的特定索引中的行

从R中的数字字符串创建单个数字的列总计

在彩色和灰度下工作的调色板?

dplyr:通过迭代向量来根据某些条件填充列

根据 R 中其他三列的值创建新列

当新列名作为字符向量给出时,在“data.table”中对数据进行分组的好方法

如何将 R 汇总与多个数字和基于文本的条件子集一起使用

如何用R绘制双坐标CDF和PDF

停止更新*输入无效react

R包stargazer产生两个表输出而不是一个

R:手动将特定行和列除以数据框中的数字

R - 根据模式和条件删除字符串列中的子字符串

如何将所有列重命名为R中的中间分隔符?

如何将行添加到 R Shiny 表

使用 dplyr 随机标记组内的记录