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

如何在R中计算大数据集中各化学课程达标学生占比

解决方法

对于这种分组统计需求,用dplyr包的分组计算比循环更简洁高效,也不容易出错,推荐新手使用:

步骤1:加载必要的包

如果你还没安装tidyverse,先执行安装命令:

install.packages("tidyverse")

然后加载dplyr(包含在tidyverse套件中):

library(dplyr)

步骤2:计算每门课程的合格占比

假设你的数据框名为student_scores,执行以下代码:

pass_rate <- student_scores %>%
  # 过滤掉考试成绩为NA的无效记录
  filter(!is.na(Exam_value)) %>%
  # 按课程名称分组
  group_by(Course) %>%
  # 统计核心指标并计算占比
  summarise(
    总有效学生数 = n(),
    合格学生数 = sum(Exam_value > Threshold),
    合格占比 = round((合格学生数 / 总有效学生数) * 100, 2)
  )

# 查看最终结果
print(pass_rate)

如果一定要用循环(不推荐)

如果想了解循环的正确写法,参考下面的代码(注意处理NA值和异常情况):

# 获取所有不重复的课程名称,排除NA值
unique_courses <- unique(student_scores$Course)
unique_courses <- unique_courses[!is.na(unique_courses)]

# 创建空数据框存储结果
result <- data.frame(课程 = character(), 合格占比 = numeric(), stringsAsFactors = FALSE)

for (course in unique_courses) {
  # 筛选当前课程且成绩非NA的记录
  current_data <- student_scores %>%
    filter(Course == course & !is.na(Exam_value))
  
  total <- nrow(current_data)
  passed <- sum(current_data$Exam_value > current_data$Threshold)
  
  # 避免出现除以0的错误(比如某课程无有效成绩)
  rate <- ifelse(total == 0, 0, round((passed / total)*100, 2))
  
  # 将当前课程结果添加到数据框
  result <- rbind(result, data.frame(课程 = course, 合格占比 = rate))
}

print(result)

常见报错原因

你之前用循环报错,大概率是没处理NA值(比如直接计算包含NA的成绩)、循环内数据筛选逻辑错误,或者拼接结果时格式不匹配。用dplyr的分组方法可以避开这些问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.29 20:05:07