dplyr-使用变量名对多个列进行分组
我正在与R Shinny合作进行一些探索性的数据分析。我有两个复选框输入,只包含用户选择的选项。第一个复选框输入仅包含分类变量;第二个复选框仅包含数值变量。接下来,我对这两个选项应用dplyr-使用变量名对多个列进行分组,r,group-by,shiny,dplyr,R,Group By,Shiny,Dplyr,我正在与R Shinny合作进行一些探索性的数据分析。我有两个复选框输入,只包含用户选择的选项。第一个复选框输入仅包含分类变量;第二个复选框仅包含数值变量。接下来,我对这两个选项应用groupby: var1 <- input$variable1 # Checkbox with categorical variables var2 <- input$variable2 # Checkbox with numerical variables v$data <
groupby
:
var1 <- input$variable1 # Checkbox with categorical variables
var2 <- input$variable2 # Checkbox with numerical variables
v$data <- dataset %>%
group_by_(var1) %>%
summarize_(Sum = interp(~sum(x), x = as.name(var2))) %>%
arrange(desc(Sum))
var1%
安排(说明(总和))
当仅选择一个分类变量时,此groupby
工作正常。当选择多个分类变量时,此groupby
返回一个具有列名的数组。如何将此列名数组传递给dplyr
的groupby
dplyr版本>1.0
对于较新版本的dplyr
,您应该在中使用以及tidyselect helper函数。有关所有帮助程序函数的列表,请参见帮助(“语言”,“tidyselect”)
。在这种情况下,如果希望字符向量中的所有列,请使用all\u of()
您可以使用rlang
包中的帮助程序,该包由创建dplyr
的团队创建。使用dplyr
和其他tidyverse软件包时,不必加载rlang
软件包即可使用这些帮助程序
具体来说,您可以使用syms
功能和代码>功能如下:
library(dplyr)
group_cols <- c("vs", "am")
mtcars %>%
group_by(!!!syms(group_cols)) %>%
summarize(mean_wt = mean(wt))
库(dplyr)
集团成本%
分组人(!!!符号(分组))%>%
汇总(平均值=平均值)
这说明了是如何
运算符和sym
函数用于单个列名(即长度为一个字符的向量)。最新版本的dplyr
包包括groupby
的变体,例如groupby\u if
和groupby\u at
。您可以使用这些选项执行与select
函数类似的语法的列选择
正如您可以使用select(my\u data,一个/u(group\u cols))
选择列列表一样,您也可以使用group\u by\u at
执行以下操作:
library(dplyr)
group_cols <- c("vs", "am")
mtcars %>%
group_by_at(.vars = vars(one_of(group_cols))) %>%
summarize(mean_wt = mean(wt))
库(dplyr)
集团成本%
一组一组(.vars=vars(一组中的一组))%>%
汇总(平均值=平均值)
对于dplyr 1.0.0
,我们基于“正常”的组有以下可能性:
library(dplyr)
group_cols <- c("vs", "am")
mtcars %>%
group_by(across(all_of(group_cols))) %>%
summarize(mean_wt = mean(wt))
库(dplyr)
集团成本%
分组依据(跨越(所有分组))%>%
汇总(平均值=平均值)
当用户选择时,我有11个分类变量,比如说它在var1
中给我3个分类变量“dish\u name”“dish\u type”[3]“user\u location\u grp”
如何将这个数组传递给groupby。因为这些答案是根本不同的方法。如果用户发现一种方法比另一种方法更有用,投票过程将清楚地表明这一点。有两篇帖子对读者没有害处,我很乐意分别对这两篇帖子发表评论和编辑。请参阅在此类情况下建议使用多个答案。应注意的是,groupby()
函数已被软性弃用,最终将从dplyr
包中删除。groupby(在本例中,是(?)中是否需要所有答案。
library(dplyr)
group_cols <- c("vs", "am")
mtcars %>%
group_by_at(.vars = vars(one_of(group_cols))) %>%
summarize(mean_wt = mean(wt))
library(dplyr)
group_cols <- c("vs", "am")
mtcars %>%
group_by(across(all_of(group_cols))) %>%
summarize(mean_wt = mean(wt))