【问题标题】:dplyr group_by dynamic colsdplyr group_by 动态列
【发布时间】:2020-02-26 15:10:57
【问题描述】:

当向 group_by 提供变量时,对于 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,这将不起作用

有什么想法吗?

【问题讨论】:

  • 您可以在... 参数中使用可变数量的裸列名称,然后使用group_by(!!!quos(...))。您也许还可以使用较新的 {{ }} tidyeval 表示法来表示 ... 之类的列表,但我不确定

标签: r dplyr rlang


【解决方案1】:

你可以试试:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-02
    • 2017-04-13
    • 1970-01-01
    • 2021-04-17
    • 2021-02-14
    • 2019-11-27
    相关资源
    最近更新 更多