我正在尝试编写一个函数,使用
以下是使用
当仅对一列进行汇总时,粘合语法有效(即汇总列名为
dplyr :: summarise
来获取数据框的多个列的均值,并使用新的rlang
粘合语法和:=
运算符为汇总列分配动态名称。以下是使用
mtcars
数据集解决问题的简单示例。当仅对一列进行汇总时,粘合语法有效(即汇总列名为
mean_mpg
):mean_fun <- function(data, group_cols, summary_col) {
data %>%
group_by(across({{ group_cols }})) %>%
summarise("mean_{{ summary_col }}" := mean({{ summary_col }}, na.rm = T))
}
mean_fun(mtcars, c(cyl, gear), mpg)
cyl gear mean_mpg
<dbl> <dbl> <dbl>
1 4 3 21.5
2 4 4 26.9
3 4 5 28.2
4 6 3 19.8
5 6 4 19.8
6 6 5 19.7
7 8 3 15.0
8 8 5 15.4
但是,当对多列进行汇总时,等效列名不会正确命名:
mean_fun_multicols <- function(data, group_cols, summary_cols) {
data %>%
group_by(across({{ group_cols }})) %>%
summarise("mean_{{ summary_cols }}" := across({{ summary_cols }}, ~ mean(., na.rm = T)))
}
mean_fun_multicols(mtcars, c(cyl, gear), c(mpg, wt))
cyl gear `mean_c(mpg, wt)`$mpg $wt
<dbl> <dbl> <dbl> <dbl>
1 4 3 21.5 2.46
2 4 4 26.9 2.38
3 4 5 28.2 1.83
4 6 3 19.8 3.34
5 6 4 19.8 3.09
6 6 5 19.7 2.77
7 8 3 15.0 4.10
8 8 5 15.4 3.37
我该如何使得汇总列的名称变为mean_mpg
和mean_wt
?为什么这个方法不起作用呢?
我知道可能有许多其他方法来完成这个任务,但是出于教学目的和自己的理解,我想知道如何使用整洁评估和rlang语法在自定义函数中实现这种方法!
谢谢