使用dplyr时如何自定义y_mean函数,无需在summarise指定y列即可分组统计均值
解决方案
完全可以实现。你自定义的y_mean函数只需要忽略传入的参数,直接从dplyr分组运算的当前上下文环境中提取y列计算均值即可,函数定义如下:
y_mean <- function(x) { # 忽略输入的x参数,直接从当前分组环境取y列计算均值 mean(cur_data()$y) }
完整可运行代码:
library(dplyr) set.seed(1453) # 自定义y_mean函数 y_mean <- function(x) { mean(cur_data()$y) } summarise_funs <- c('mean','median','sum','y_mean') iris %>% mutate(y=rnorm(nrow(.),mean=2,sd=3)) %>% group_by(Species) %>% summarise(stat = get(summarise_funs[4])(Sepal.Width))
运行后输出结果和预期完全一致:
# A tibble: 3 × 2 Species stat <fct> <dbl> 1 setosa 1.81 2 versicolor 1.85 3 virginica 2.34
实现原理
dplyr 1.0.0及以上版本提供的cur_data()函数可以直接获取当前分组的所有数据列,不需要提前在summarise的参数位置指定y列,函数内部直接调用即可满足你的需求。
内容的提问来源于stack exchange,提问作者Samet Sökel
相关产品推荐
相关产品推荐

