假设我有一个函数 foo 和一个包含 a 到 z 列和值的数据集 dat。假设我必须按多个变量分组,但其中一个是固定的。例如,我必须按 a 分组,然后设置另一个分组变量(从 vars([insert variable here])
我尝试过的一个选项是:
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 进行分组。前者显示错误消息。如何在同一个函数中保留固定变量和“被调用”或“变量”变量?
答案 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