r语言 - 使用粘附语法将多个数据变量隧道传输到"summarise"



以下是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))

显然通过将矢量dispmpg彼此连接而仅产生单列。有没有其他方法可以使用粘合语法来解释多个变量?

您需要在这里使用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

最新更新