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

如何在R中批量计算加权GPA?

在R中批量计算学生GPA的方法

前提假设

假设你的数据集名为score_data,包含三列核心数据:

  • student_id:学生唯一标识(分组计算的关键列)
  • grade:单科成绩(0-7分)
  • credit:对应课程学分(12.5或25)

方法一:基础R的aggregate函数(无需额外装包)

用基础R自带的分组聚合功能,先算每个学生的加权成绩总和与总学分,再推导GPA:

# 计算每个学生的加权成绩和、总学分
student_stats <- aggregate(
  cbind(weighted_sum = grade * credit, total_credit = credit) ~ student_id,
  data = score_data,
  FUN = sum
)

# 计算GPA
student_stats$gpa <- student_stats$weighted_sum / student_stats$total_credit

方法二:tidyverse套件(流水线式数据处理)

如果习惯直观的数据流操作,推荐用dplyr(属于tidyverse):

# 首次使用需安装tidyverse
# install.packages("tidyverse")
library(tidyverse)

# 分组计算GPA
student_gpa <- score_data %>%
  group_by(student_id) %>%
  summarize(
    total_weighted = sum(grade * credit),
    total_credit = sum(credit),
    gpa = total_weighted / total_credit
  ) %>%
  ungroup()

验证示例数据

用你给出的测试案例验证:

# 构造示例数据
sample_data <- data.frame(
  student_id = rep("stu001", 4),
  grade = c(6,7,6,5),
  credit = c(12.5,12.5,12.5,25)
)

# 计算GPA
sample_data %>%
  group_by(student_id) %>%
  summarize(gpa = sum(grade*credit)/sum(credit))
# 输出结果为5.8,与示例一致

注意事项

  • 检查数据类型:确保grade和credit是数值型,用str(score_data)查看;如果是字符型,转成数值:score_data$grade <- as.numeric(score_data$grade)
  • 处理缺失值:有缺失数据时,可先用na.omit(score_data)删除缺失行,或在计算时加sum(..., na.rm=TRUE)忽略缺失值
  • 确认student_id唯一:保证每个学生的ID一致,避免分组错误

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 20:39:19