能否在summarise_all中结合median与na.rm参数使用?
解决dplyr按组计算所有列中位数并忽略空值的问题
问题原因
mean能直接生效是因为summarise_all的额外参数会将na.rm=T传递给mean,但部分版本的dplyr中,median的参数传递易出现兼容问题,显式定义函数逻辑更可靠。
解决方案
方法1:使用匿名函数
通过匿名函数明确给median传递na.rm参数:
df_sector <- df %>% group_by(Sector) %>% summarise_all(function(x) median(x, na.rm = TRUE))
方法2:使用funs()(旧版dplyr写法)
用funs()包裹计算逻辑,通过.指代每一列:
df_sector <- df %>% group_by(Sector) %>% summarise_all(funs(median(., na.rm = TRUE)))
方法3:推荐使用across()(新版dplyr标准写法)
由于summarise_all已被软弃用,新版dplyr推荐用across()实现批量列操作:
df_sector <- df %>% group_by(Sector) %>% summarise(across(everything(), ~median(., na.rm = TRUE)))
额外提示
如果仍报错,检查数据是否包含非数值型列——median仅支持数值/有序因子类型数据,可仅对数值列计算:
df_sector <- df %>% group_by(Sector) %>% summarise(across(where(is.numeric), ~median(., na.rm = TRUE)))
内容的提问来源于stack exchange,提问作者samsacat
相关产品推荐
相关产品推荐

