R中如何计算嵌套组均值、统计观测数并分州导出结果至Excel?
处理需求说明
- 待处理数据集覆盖多州学生测试成绩:每个州下设10所学校,每所学校标记为公立(public)/私立(private)类型,同时记录item1、item2、item3三项测试的原始成绩
- 统计维度为单所学校,最终输出的每份Excel需包含固定7个字段:
- 所属州名称
- 学校名称
- 学校类型标识
- 对应学校的总学生人数
- item1成绩的校级均值
- item2成绩的校级均值
- item3成绩的校级均值
- 完成统计计算后,按州维度拆分结果集,每个州单独导出为独立的Excel文件
模拟演示数据集构造
以下为可直接运行的模拟数据生成代码,用于复现演示场景:
library(randomNames) # 构造基础观测字段 ID = 1:50 # 配置5个测试州,每个州匹配10条观测值 states = rep(c("TS", "NE", "AR", "MO", "WA"), times = c(10, 10, 10, 10, 10)) # 生成随机模拟的学校名称 schools = randomNames::randomNames(50) # 生成学校类型标识 type = rep(c("private", "public"), times = c(20, 30)) # 生成三项测试的模拟成绩 item1 = rnorm(50, mean = 25, sd = 5) item2 = rnorm(50, mean = 30, sd = 5) item3 = rnorm(50, mean = 15, sd = 5) # 合并为标准数据框 df = data.frame(ID, states, schools, type, item1, item2, item3)
学校维度统计计算
基于原始数据集完成分组聚合,计算要求的统计指标:
library(dplyr) school_stat <- df %>% # 按州、学校名称、学校类型分组,保证同一学校的字段标识统一 group_by(states, schools, type) %>% summarise( student_num = n(), # 计算每所学校的学生总数 item1_mean = mean(item1, na.rm = TRUE), item2_mean = mean(item2, na.rm = TRUE), item3_mean = mean(item3, na.rm = TRUE), .groups = "drop" # 移除分组属性,简化后续导出逻辑 )
按州拆分导出Excel
沿用已验证可正常运行的导出逻辑,替换为聚合后的统计结果:
# 按州拆分统计结果为列表结构 state_list <- split(school_stat, school_stat$states) # 逐份写入对应命名的Excel文件 Map( openxlsx::write.xlsx, state_list, paste0(names(state_list), ".xlsx") )
小提示:构造模拟数据时要保证同一所学校对应的所属州、学校类型字段完全统一,避免分组时出现拆分偏差。
内容的提问来源于stack exchange,提问作者Identicon
相关产品推荐
相关产品推荐

