这个问题在这里已有答案:
-
Aggregate / summarize multiple variables per group (e.g. sum, mean) 5个答案
-
Can dplyr summarise over several variables without listing each one? [duplicate] 2个答案
我在使用dplyr语法时遇到了一些麻烦 . 我有一个包含不同变量和一个分组变量的数据框 . 现在我想用R中的dplyr计算每个组中每列的平均值 .
df <- data.frame(
a = sample(1:5, n, replace = TRUE),
b = sample(1:5, n, replace = TRUE),
c = sample(1:5, n, replace = TRUE),
d = sample(1:5, n, replace = TRUE),
grp = sample(1:3, n, replace = TRUE)
)
df %>% group_by(grp) %>% summarise(mean(a))
这给出了“grp”表示的每个组的“a”列的平均值 .
我的问题是:是否有可能同时获得每个组中每列的方法?或者我是否必须为每列重复 df %>% group_by(grp) %>% summarise(mean(a))
?
我想拥有的是类似的东西
df %>% group_by(grp) %>% summarise(mean(a:d)) # "mean(a:d)" does not work
5 回答
所有的例子都很棒,但我想再添加一个例子来说明如何使用"tidy"格式简化事情 . 现在,数据框采用"wide"格式,这意味着变量"a"到"d"以列表示 . 要获得"tidy"(或长)格式,可以使用
tidyr
包中的gather()
,它将"a"到"d"列中的变量转换为行 . 然后使用group_by()
和summarize()
函数来获取每个组的平均值 . 如果要以宽格式显示数据,只需再调用spread()
函数即可 .您可以简单地将更多参数传递给
summarise
:来源:本地数据框[3 x 5]
为了完整性:使用dplyr v0.2
ddply
和colwise
也会这样做:但速度较慢,至少在这种情况下:
dplyr
包为此目的包含summarise_all
:如果只想汇总某些列,请使用
summarise_at
或summarise_if
函数 .或者,
purrrlyr
包提供相同的功能:另外不要忘记
data.table
:我们试着比较一下性能 .
我们可以在
dplyr 0.7.4
上使用summarize_at
,summarize_all
和summarize_if
进行汇总 . 我们可以使用vars
和funs
参数设置多个列和函数,如下面的代码所示 . funs公式的左侧被指定为汇总变量的后缀 . 在dplyr 0.7.4
中,summarise_each
(和mutate_each
)已被弃用,因此我们无法使用这些函数 .您应该更改为以下代码 . 以下代码都具有相同的结果 .
您还可以拥有多种功能 .