用dplyr总结多列?

用dplyr总结多列?

我有点纠结于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


浮云间
浏览 770回答 3
3回答

蓝山帝景

我们可以用summarize_at,&nbsp;summarize_all和summarize_if在……上面dplyr 0.7.4..我们可以通过以下方式设置多个列和多个函数vars和funs参数如下代码所示。Funs公式的左边被指定为摘要vars的后缀.在dplyr 0.7.4,&nbsp;summarise_each(和mutate_each)已经被废弃,因此我们不能使用这些函数。options(scipen&nbsp;=&nbsp;100,&nbsp;dplyr.width&nbsp;=&nbsp;Inf,&nbsp;dplyr.print_max&nbsp;=&nbsp;Inf)library(dplyr)packageVersion("dplyr")#&nbsp;[1]&nbsp;‘0.7.4’set.seed(123)df&nbsp;<-&nbsp;data_frame( &nbsp;&nbsp;a&nbsp;=&nbsp;sample(1:5,&nbsp;10,&nbsp;replace=T),&nbsp; &nbsp;&nbsp;b&nbsp;=&nbsp;sample(1:5,&nbsp;10,&nbsp;replace=T),&nbsp; &nbsp;&nbsp;c&nbsp;=&nbsp;sample(1:5,&nbsp;10,&nbsp;replace=T),&nbsp; &nbsp;&nbsp;d&nbsp;=&nbsp;sample(1:5,&nbsp;10,&nbsp;replace=T),&nbsp; &nbsp;&nbsp;grp&nbsp;=&nbsp;as.character(sample(1:3,&nbsp;10,&nbsp;replace=T))&nbsp;#&nbsp;For&nbsp;convenience,&nbsp;specify&nbsp;character&nbsp;type)df&nbsp;%>%&nbsp;group_by(grp)&nbsp;%>%&nbsp; &nbsp;&nbsp;summarise_each(.vars&nbsp;=&nbsp;letters[1:4], &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.funs&nbsp;=&nbsp;c(mean="mean"))#&nbsp;`summarise_each()`&nbsp;is&nbsp;deprecated.#&nbsp;Use&nbsp;`summarise_all()`,&nbsp;`summarise_at()`&nbsp;or&nbsp;`summarise_if()`&nbsp;instead.#&nbsp;To&nbsp;map&nbsp;`funs`&nbsp;over&nbsp;a&nbsp;selection&nbsp;of&nbsp;variables,&nbsp;use&nbsp;`summarise_at()`#&nbsp;Error:&nbsp;Strings&nbsp;must&nbsp;match&nbsp;column&nbsp;names.&nbsp;Unknown&nbsp;columns:&nbsp;mean您应该更改为以下代码。以下代码都有相同的结果。#&nbsp;summarise_atdf&nbsp;%>%&nbsp;group_by(grp)&nbsp;%>%&nbsp; &nbsp;&nbsp;summarise_at(.vars&nbsp;=&nbsp;letters[1:4], &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.funs&nbsp;=&nbsp;c(mean="mean"))df&nbsp;%>%&nbsp;group_by(grp)&nbsp;%>%&nbsp; &nbsp;&nbsp;summarise_at(.vars&nbsp;=&nbsp;names(.)[1:4], &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.funs&nbsp;=&nbsp;c(mean="mean"))df&nbsp;%>%&nbsp;group_by(grp)&nbsp;%>%&nbsp; &nbsp;&nbsp;summarise_at(.vars&nbsp;=&nbsp;vars(a,b,c,d), &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.funs&nbsp;=&nbsp;c(mean="mean"))#&nbsp;summarise_alldf&nbsp;%>%&nbsp;group_by(grp)&nbsp;%>%&nbsp; &nbsp;&nbsp;summarise_all(.funs&nbsp;=&nbsp;c(mean="mean"))#&nbsp;summarise_ifdf&nbsp;%>%&nbsp;group_by(grp)&nbsp;%>%&nbsp; &nbsp;&nbsp;summarise_if(.predicate&nbsp;=&nbsp;function(x)&nbsp;is.numeric(x), &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.funs&nbsp;=&nbsp;funs(mean="mean"))#&nbsp;A&nbsp;tibble:&nbsp;3&nbsp;x&nbsp;5#&nbsp;grp&nbsp;a_mean&nbsp;b_mean&nbsp;c_mean&nbsp;d_mean#&nbsp;<chr>&nbsp;&nbsp;<dbl>&nbsp;&nbsp;<dbl>&nbsp;&nbsp;<dbl>&nbsp;&nbsp;<dbl>#&nbsp;1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1&nbsp;&nbsp;&nbsp;2.80&nbsp;&nbsp;&nbsp;3.00&nbsp;&nbsp;&nbsp;&nbsp;3.6&nbsp;&nbsp;&nbsp;3.00#&nbsp;2&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;2&nbsp;&nbsp;&nbsp;4.25&nbsp;&nbsp;&nbsp;2.75&nbsp;&nbsp;&nbsp;&nbsp;4.0&nbsp;&nbsp;&nbsp;3.75#&nbsp;3&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;3&nbsp;&nbsp;&nbsp;3.00&nbsp;&nbsp;&nbsp;5.00&nbsp;&nbsp;&nbsp;&nbsp;1.0&nbsp;&nbsp;&nbsp;2.00您还可以具有多个函数。df %>% group_by(grp) %>%&nbsp;&nbsp; summarise_at(.vars = letters[1:2],&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;.funs = c(Mean="mean", Sd="sd"))# A tibble: 3 x 5# grp a_Mean b_Mean&nbsp; &nbsp; &nbsp; a_Sd&nbsp; &nbsp; &nbsp;b_Sd# <chr>&nbsp; <dbl>&nbsp; <dbl>&nbsp; &nbsp; &nbsp;<dbl>&nbsp; &nbsp; <dbl># 1&nbsp; &nbsp; &nbsp;1&nbsp; &nbsp;2.80&nbsp; &nbsp;3.00 1.4832397 1.870829# 2&nbsp; &nbsp; &nbsp;2&nbsp; &nbsp;4.25&nbsp; &nbsp;2.75 0.9574271 1.258306# 3&nbsp; &nbsp; &nbsp;3&nbsp; &nbsp;3.00&nbsp; &nbsp;5.00&nbsp; &nbsp; &nbsp; &nbsp; NA&nbsp; &nbsp; &nbsp; &nbsp;NA
打开App,查看更多内容
随时随地看视频慕课网APP