在dplyr 0.6中对多个以编程方式指定的变量进行分组

在dplyr 0.6中对多个以编程方式指定的变量进行分组,r,dplyr,tidyverse,rlang,R,Dplyr,Tidyverse,Rlang,这是新的dplyr,很快就会发布 给出了使用外部函数中指定的分组变量调用group\u by的示例: my_summarise <- function(df, group_var) { df %>% group_by(!!group_var) %>% summarise(a = mean(a)) } 我的总结% 分组依据(!!分组变量)%>% 总结(a=平均值(a)) } 当提供单个分组变量时,此选项有效。但是,由于存在多个变量,它会失败 简化示例: f

这是新的dplyr,很快就会发布

给出了使用外部函数中指定的分组变量调用
group\u by
的示例:

my_summarise <- function(df, group_var) {
  df %>%
    group_by(!!group_var) %>%
    summarise(a = mean(a))
}
我的总结%
分组依据(!!分组变量)%>%
总结(a=平均值(a))
}
当提供单个分组变量时,此选项有效。但是,由于存在多个变量,它会失败

简化示例:

f <- function(x)
{
    group_by(mtcars, !!x)
}

## works
g1 <- "cyl"
f(g1)

## doesn't work
#Error in mutate_impl(.data, dots) : 
#  Column `c("cyl", "gear")` must be length 32 (the number of rows) or one, not 2
g2 <- c("cyl", "gear")
f(g2)

f有一个非常类似的问题:。我刚刚修改了一下答案,使用了
syms

library(rlang)
f <- function(x){
  group_by(mtcars, !!!syms(x))
}

f(c("cyl")) %>% summarise(n())
# A tibble: 3 x 2
    cyl `n()`
  <dbl> <int>
1     4    11
2     6     7
3     8    14

f(c("cyl", "gear")) %>% summarise(n())
# A tibble: 8 x 3
# Groups:   cyl [?]
    cyl  gear `n()`
  <dbl> <dbl> <int>
1     4     3     1
2     4     4     8
3     4     5     2
4     6     3     2
5     6     4     4
6     6     5     1
7     8     3    12
8     8     5     2
库(rlang)
f%摘要(n())
#一个tibble:3x2
共青团()`
1     4    11
2     6     7
3     8    14
f(c(“气缸”、“齿轮”))%>%总结(n())
#一个tibble:8x3
#组别:共青团[?]
气缸齿轮'n()`
1     4     3     1
2     4     4     8
3     4     5     2
4     6     3     2
5     6     4     4
6     6     5     1
7     8     3    12
8     8     5     2
实际上,
f(g1)
也不起作用。尝试
f(g1)%%>%summary(n=n())