以下是https://www.tidyverse.org/blog/2020/02/glue-strings-and-tidy-eval/,我想使用该函数将多个数据变量隧道传输到summarise
命令。功能定义为:
library(tidyverse)
mean_by <- function(data, by, var) {
data %>%
group_by({{ by }}) %>%
summarise("{{ var }}" := mean({{ var }}, na.rm = TRUE))
}
我想为我通过var
传递的每个变量获得一列。然而,
mtcars %>%
as_tibble() %>%
mean_by(cyl, c(disp, mpg))
显然通过将矢量disp
和mpg
彼此连接而仅产生单列。有没有其他方法可以使用粘合语法来解释多个变量?
您需要在这里使用across
,因为您希望为多个列应用函数。
library(dplyr)
library(rlang)
mean_by <- function(data, by, var) {
data %>%
group_by({{ by }}) %>%
summarise(across({{var}}, mean, .names = '{col}_mean'))
#For dplyr < 1.0.0 use `summarise_at`
#summarise_at(vars({{var}}), mean)
}
mtcars %>% mean_by(cyl, c(disp, mpg))
# A tibble: 3 x 3
# cyl disp_mean mpg_mean
# <dbl> <dbl> <dbl>
#1 4 105. 26.7
#2 6 183. 19.7
#3 8 353. 15.1