R语言优先采用dplyr实现含缺失值列的逐列条件均值统计
Dplyr 实现方案
完全可以生成符合规则的列均值汇总表。base::mean()搭配na.rm = TRUE参数的计算逻辑,和题目要求的规则完全匹配:无需逐列提前判断列内是否存在NA,参数生效后会自动跳过空值计算有效值的均值,列内无空值时正常计算全列均值,等效于先通过na.exclude剔除空值再运算的逻辑。
核心实现(适配dplyr 1.0.0及以上新版本)
library(dplyr) df %>% summarise( # 批量对所有列计算均值,自动重命名为`mean_原列名`格式 across(everything(), ~mean(.x, na.rm = TRUE), .names = "mean_{.col}") )
输出结果
mean_num1 mean_num2 mean_num3 1 2 5 11
逐列校验计算逻辑和规则完全一致:
- num1列无空值:直接计算全列均值
(1+2+3)/3 = 2 - num2列无空值:直接计算全列均值
(4+5+6)/3 = 5 - num3列含空值:排除NA后计算有效值均值
(10+12)/2 = 11
旧版dplyr兼容写法(1.0.0以下版本)
针对不支持across()函数的低版本dplyr,可用等价实现:
df %>% summarise_all(~mean(., na.rm = TRUE)) %>% setNames(paste0("mean_", names(.)))
内容的提问来源于stack exchange,提问作者shsh
相关产品推荐
相关产品推荐

