You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用R将学校级聚合数据转换为学生级明细数据集?

在R中将学校级聚合数据转换为学生级明细数据

数据转换实现代码

针对你的学校级聚合数据,我们可以用dplyr和tidyr包高效完成向学生级明细数据的转换,无需手动循环:

# 加载所需包
library(dplyr)
library(tidyr)

# 假设你的原始数据集名为df,执行以下转换
student_level_df <- df %>%
  # 将不及格/及格人数拆分为两行记录
  pivot_longer(
    cols = c(不及格人数, 及格人数),
    names_to = "count_type",
    values_to = "student_count"
  ) %>%
  # 映射生成及格状态列
  mutate(及格状态 = ifelse(count_type == "不及格人数", "N", "Y")) %>%
  # 根据人数展开为对应行数的学生记录
  uncount(student_count) %>%
  # 保留核心字段,移除临时辅助列
  select(学校ID, 及格状态, 城区标识, `%FSM`)

这段代码会自动为每所学校生成对应数量的学生行:比如学校ID=1的记录会生成12条及格状态=N、43条及格状态=Y的行,同时保留学校的城区标识、%FSM等属性。对于3200所学校的规模,该向量化操作的效率远高于循环,能快速完成转换。


关于你的统计任务的补充提示

1. 城区与乡村学校及格率差异分析

转换为学生级数据后,可通过卡方检验或逻辑回归模型验证差异显著性:

# 卡方检验
chisq.test(table(student_level_df$城区标识, student_level_df$及格状态))

# 逻辑回归模型(可输出更详细的显著性结果)
glm_fit <- glm(及格状态 ~ 城区标识, data = student_level_df, family = binomial())
summary(glm_fit)

2. Beta回归模型构建

注意:Beta回归针对的是比例型响应变量,你完全可以直接用学校级的及格率(及格人数/参考总人数)建模,无需转换为学生级数据,这会大幅降低计算量:

library(betareg)

# 先计算学校级及格率
df$及格率 <- df$及格人数 / df$参考总人数

# 拟合Beta回归模型
beta_fit <- betareg(及格率 ~ 城区标识 + `%FSM`, data = df)
summary(beta_fit)

这种方式更适合3200条学校数据的规模,结果也更简洁高效。

内容的提问来源于stack exchange,提问作者Jess

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.13 11:53:14