dplyr group_by 动态列

3

当group_by接收到一个变量时,最佳的分组方法是什么?考虑以下简单的函数:

library(dplyr)

myFunction <- function(df, 
                        col_name) {

    out <- 
      group_by(col_name) %>%
      summarize(mean = mean(mpg))

    return(out)
  }

  myFunction(mtcars, col_name = c('cyl', 'am'))

调用该函数返回一个错误,指出列不存在。我理解为什么会出现这种情况,但不确定最好的解决方法。如果只有一个分组变量,则可以使用以下方法使其工作:
group_by(!!as.name(col_name)) 

但是,如果 col_name 是一个长度 > 1 的向量,则无法使用此方法。

有什么想法吗?


1
你可以在 ... 参数中使用可变数量的裸列名,然后使用 group_by(!!!quos(...))。你也可以尝试使用新的 {{ }} tidyeval 表示法来表示类似于 ... 的列表,但我不确定是否可行。 - camille
这个回答解决了你的问题吗?dplyr - 使用变量名在多列上进行groupby - camille
1个回答

2
您可以尝试以下方法:
myFunction <- function(df, col_name) {
 out <- df %>%
  group_by_at(vars(one_of(col_name))) %>%
  summarize(mean = mean(mpg))

 return(out)
}

myFunction(mtcars, col_name = c("cyl", "am"))

    cyl    am  mean
  <dbl> <dbl> <dbl>
1     4     0  22.9
2     4     1  28.1
3     6     0  19.1
4     6     1  20.6
5     8     0  15.0
6     8     1  15.4

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接