R语言按分组对数值列算中位数、字符列算众数的实现方法
R语言按分组对不同类型变量批量统计的高效实现方案
用dplyr的跨列操作函数across()实现批量统计,无需手动逐列写统计逻辑,适配任意列数的数据集,核心实现如下:
- 加载依赖包
# 未安装dplyr的话先执行安装:install.packages("dplyr") library(dplyr)
- 自定义众数计算函数(R基础包无内置众数函数)
# 规则:返回出现次数最多的值,平票时取第一个出现的值,可兼容处理缺失值 get_mode <- function(x, rm_na = TRUE) { if(rm_na) x <- na.omit(x) freq <- table(x) names(freq)[which.max(freq)] }
- 核心分组统计代码
original2 <- original %>% # 按group字段分组 group_by(group) %>% summarise( # 批量处理所有数值列,计算中位数,有缺失值可加na.rm=TRUE参数 across(all_of(numeric), \(x) median(x, na.rm = TRUE)), # 批量处理所有剔除id后的字符列,计算众数 across(all_of(char), get_mode) ) %>% ungroup()
上述代码会自动适配所有符合条件的列,新增列只要属于你提前定义的numeric/char向量范围,不需要修改统计逻辑就能自动纳入计算,完全适配多列的业务数据集。
内容的提问来源于stack exchange,提问作者vog
相关产品推荐
相关产品推荐

