Nei*_*eil 19 group-by r shiny dplyr
我正在与R shine合作进行一些探索性数据分析.我有两个复选框输入,在一个复选框中我填充所有分类变量,其他都是数字变量.然后我在这两个选项上应用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))
Run Code Online (Sandbox Code Playgroud)
当只有1列的groupby时,哪种工作完全正常,但我想在多列上进行分组.当用户选择多个分类变量时,它会返回一个包含列名的数组.如何在dplyr groupby中传递此信息.
MrF*_*ick 37
如果你有一个变量名的向量,你应该将它们传递给.dots=参数group_by_.例如:
mtcars %>%
group_by_(.dots=c("mpg","hp","wt")) %>%
summarize(x=mean(gear))
Run Code Online (Sandbox Code Playgroud)
Mic*_*l M 11
有了dplyr 1.0.0,我们有以下基于“正常”的可能性group_by:
library(dplyr)
group_cols <- c("vs", "am")
mtcars %>%
group_by(across(all_of(group_cols))) %>%
summarize(mean_wt = mean(wt))
Run Code Online (Sandbox Code Playgroud)
bsc*_*idr 10
您可以使用rlangpackage 中的 helpers ,它是由创建dplyr. 使用dplyr和 其他 tidyverse 包时,您不必加载rlang包即可使用这些帮助程序。
具体来说,您可以像这样使用syms函数和!!!函数:
library(dplyr)
group_cols <- c("vs", "am")
mtcars %>%
group_by(!!!syms(group_cols)) %>%
summarize(mean_wt = mean(wt))
Run Code Online (Sandbox Code Playgroud)
这个密切相关的问题和答案解释了如何将!!运算符和sym函数用于单个列名(即长度为一的字符向量)。
该dplyr软件包的最新版本包括 的变体group_by,例如group_by_if和group_by_at。您可以使用这些来使用与select函数类似的语法来执行列选择。
就像您可以使用 选择列列表一样select(my_data, one_of(group_cols)),您可以使用它group_by_at来执行以下操作:
library(dplyr)
group_cols <- c("vs", "am")
mtcars %>%
group_by_at(.vars = vars(one_of(group_cols))) %>%
summarize(mean_wt = mean(wt))
Run Code Online (Sandbox Code Playgroud)