11.6 拓展部分

在我之前工作中遇到需要分组计算时,我想要编写一个函数实现某些功能,但是分组的group_by()字段不一样时,导致代码没办法复用。

参考资料:https://dplyr.tidyverse.org/articles/programming.html

#library(tidyverse)
mean_mpg = function(data, group_col) {
  data %>% 
    group_by(group_col) %>%
    summarize(mean_mpg = mean(mpg))
}
mtcars %>% mean_mpg(cyl)
mtcars %>% mean_mpg(gear)

当编写如下函数时,代码将成功运行

#自定义函数
my_summarise3 <- function(data, group_var,mean_var, sd_var) {
  data %>% 
    group_by({{ group_var }}) %>% 
    summarise(mean = mean({{ mean_var }}), sd = mean({{ sd_var }}))
}

res1 <- my_summarise3(data = mtcars,group_var = cyl,mean_var = carb,sd_var = gear)
my_summarise3(data = mtcars,group_var = am,mean_var = carb,sd_var = gear)
#> # A tibble: 2 x 3
#>      am  mean    sd
#>   <int> <dbl> <dbl>
#> 1     0  2.74  3.21
#> 2     1  2.92  4.38
#正常写法
res2 <- mtcars %>% 
  group_by(cyl) %>% 
  summarise(mean=mean(carb),sd=mean(gear))

identical(res1,res2)
#> [1] TRUE

#res1 和res2 结果完全一致

以上my_summarise3()函数可以按照需求任意指定聚合汇总字段。