如何为含NA的分组多变量生成mean与sd统计表格
解决分组多变量均值&标准差计算(含NA值处理)
完整解决方案代码
# 加载必要工具包 library(dplyr) library(tidyr) # 构造带NA值的示例数据集 irisalt <- iris irisalt[1, 1] <- NA irisalt[52, 2] <- NA irisalt[103, 3] <- NA # 核心计算逻辑:按分组统计,保留非NA的有效数据 result <- irisalt %>% group_by(Species) %>% summarise( # 对所有非分组列计算均值和标准差,自动生成规范列名 across( everything(), list(mean = ~mean(., na.rm = TRUE), sd = ~sd(., na.rm = TRUE)), .names = "{.col}_{.fn}" ) ) # 查看结果 print(result)
关键逻辑说明
group_by(Species):按指定分组字段(Species)划分数据across(everything(), ...):对所有非分组列批量应用统计函数;若只需计算指定变量,可替换为c(Sepal.Length, Sepal.Width)这类列名向量list(mean = ~mean(., na.rm=T), sd = ~sd(., na.rm=T)):对每个变量同时计算均值和标准差,na.rm=TRUE仅忽略当前变量的NA值,不会删除整行,避免干扰其他变量的统计结果.names = "{.col}_{.fn}":自动生成清晰的列名(如Sepal.Length_mean、Sepal.Length_sd),对应变量和统计类型
运行后将得到每个分组一行的结果,每个原始变量对应均值、标准差两列,完全匹配需求。
内容的提问来源于stack exchange,提问作者Mark Davies
相关产品推荐
相关产品推荐

