使用不同的函数汇总大量变量

时间:2016-07-05 13:10:12

标签: r dplyr

我想计算大数据帧的所有变量的总和或平均值(或每个其他可能的摘要)。如果可能,只应在一个管道中执行此操作。据我所知,您只能以单独选择每个变量的函数的方式使用sumarise()(例如summarise(., mean_var1 = mean(var1), sum_var2 = sum(var2), ...))。这将是很多打字的方式。另一方面,我认为summarise_each()可以处理多个列但是不可能说我想要列1的平均值和所有其他列的总和。

我正在寻找一种方法来结合summarise的变异性和summarise_each的范围。像summarise( name(df)[1] = mean(.[ ,1]), name(df)[2:3] = sum(.[ ,2:3]) )这样的东西。这可能是dplyr吗?

一些玩具数据:

library(dplyr)
set.seed(1)
df <- data.frame(a = sample(0:1, 100, replace = TRUE), 
                 b = rnorm(100),
                 c = rnorm (100))

所需的输出:

 df %>%
  summarise(a = mean(a), b = sum(b), c = sum(c))
     a         b        c
1 0.48 -1.757949 2.277879

1 个答案:

答案 0 :(得分:1)

我们可以在data.table

中更轻松地完成此操作
library(data.table)
setDT(df)[, c(a=mean(a), lapply(.SD, sum)), .SDcols = b:c]
#     a         b        c
#1: 0.48 -1.757949 2.277879

dplyr的一个选项是获取'{1}}的'a',然后执行mean

summarise_each

或与library(dplyr) df %>% mutate(a= mean(a)) %>% group_by(a) %>% summarise_each(funs(sum)) # a b c # <dbl> <dbl> <dbl> #1 0.48 -1.757949 2.277879

结合使用
dmap