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

如何按班级计算各年级占比并统计三年级占比的均值与标准差

解决方法

方法一:补全缺失的因子水平(长格式输出)

分组统计时部分班级会缺失trs1jgs的某个因子水平(比如只有3年级学生时,4年级的行会缺失),可以用tidyr::complete()函数补全这些缺失组合,再计算占比:

library(tidyverse)

# 生成包含所有年级占比的完整表格
Grade <- B %>%
  group_by(sg_id, trs1jgs) %>%
  summarise(n = n(), .groups = "drop_last") %>%  # 仅保留班级分组,方便计算班级总人数
  complete(trs1jgs, fill = list(n = 0)) %>%  # 补全当前班级缺失的年级,对应人数填0
  mutate(freq = n / sum(n)) %>%  # 计算各年级学生占比
  ungroup()

这段代码会确保每个班级都有3年级和4年级的行,哪怕对应年级没有学生(占比为0)。

方法二:直接计算各年级占比(宽格式输出,更高效)

如果目标是快速得到每个班级的年级占比,同时方便提取3年级占比的向量,可以跳过统计人数的步骤,直接在班级分组内计算占比:

# 生成宽格式占比表格,每个班级对应一行
Grade_wide <- B %>%
  group_by(sg_id) %>%
  summarise(
    grade3_freq = mean(trs1jgs == 3),  # 逻辑值转数值后取均值,即为3年级学生占比
    grade4_freq = mean(trs1jgs == 4),
    .groups = "drop"
  )

提取3年级占比并计算均值、标准差

无论用哪种方法,都可以轻松提取3年级占比的向量并计算统计量:

# 从长格式表格提取
grade3_freq_long <- Grade %>%
  filter(trs1jgs == 3) %>%
  pull(freq)

# 从宽格式表格提取
grade3_freq_wide <- Grade_wide$grade3_freq

# 计算均值和标准差
mean(grade3_freq_wide)
sd(grade3_freq_wide)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 15:18:27