使用带有固定变量名和通过函数调用的变量名的 group_by

时间:2021-01-02 14:24:32

标签: r function dplyr

假设我有一个函数 foo 和一个包含 a 到 z 列和值的数据集 dat。假设我必须按多个变量分组,但其中一个是固定的。例如,我必须按 a 分组,然后设置另一个分组变量(从 vars([insert variable here])

中的 b 到 z

我尝试过的一个选项是:

      foo <- function(.vars){
dat %>% group_by(a, .vars) %>% summarize(mean = mean(value)) 
    }

接下来是:

   foo <- function(.vars){
dat %>% group_by(a) %>% group_by_at(.vars) %>% summarize(mean = mean(value)) 
    }

这也不起作用,因为它仅按 .vars 变量而不是 a 进行分组。前者显示错误消息。如何在同一个函数中保留固定变量和“被调用”或“变量”变量?

1 个答案:

答案 0 :(得分:0)

group_by_at 已被取代,您现在可以使用 across :

library(dplyr)

foo <- function(data, vars){
  dat %>% 
    group_by(across("a", all_of(vars))) %>% 
    summarize(mean = mean(value)) 
}

使用 mtcars 数据集的示例:

foo <- function(dat, vars){
  dat %>% 
     group_by(across(c("cyl", all_of(vars)))) %>% 
     summarize(mean = mean(mpg)) 
}

foo(mtcars, "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

foo(mtcars, c("am", "gear"))

#     cyl    am  gear  mean
#   <dbl> <dbl> <dbl> <dbl>
# 1     4     0     3  21.5
# 2     4     0     4  23.6
# 3     4     1     4  28.0
# 4     4     1     5  28.2
# 5     6     0     3  19.8
# 6     6     0     4  18.5
# 7     6     1     4  21  
# 8     6     1     5  19.7
# 9     8     0     3  15.0
#10     8     1     5  15.4