我想计算大数据帧的所有变量的总和或平均值(或每个其他可能的摘要)。如果可能,只应在一个管道中执行此操作。据我所知,您只能以单独选择每个变量的函数的方式使用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
答案 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