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

如何基于指定规则按行判定学生成绩(R语言实现)

R语言实现成绩等级判定逻辑

判定规则

  • PASSED:总分大于200,且所有科目分数均大于33
  • ER(Essential Repeat):总分大于200,且有1-2科分数低于33
  • FAILED:超过2科分数低于33,或总分≤200

实现代码

方法1:使用dplyr包(推荐,代码更直观)

library(dplyr)

# 原始数据框
df <- data.frame(
  student = c("a", "b", "c", "d", "e"),
  subject1 = c(40, 50, 60, 70, 80),   
  subject2 = c(35, 45, 55, 65, 75),  
  subject3 = c(38, 48, 58, 68, 78),   
  subject4 = c(33, 34, 35, 36, 37),  
  subject5 = c(42, 52, 62, 72, 82) 
)

# 添加总分、不及格科目数,并判定等级
df <- df %>%
  mutate(total_score = rowSums(select(., starts_with("subject")))) %>%
  mutate(failed_subjects = rowSums(select(., starts_with("subject")) < 33)) %>%
  mutate(grade = case_when(
    total_score > 200 & failed_subjects == 0 ~ "PASSED",
    total_score > 200 & between(failed_subjects, 1, 2) ~ "ER",
    TRUE ~ "FAILED"
  ))

# 查看结果
print(df)

方法2:基础R实现(无需额外包)

# 原始数据框
df <- data.frame(
  student = c("a", "b", "c", "d", "e"),
  subject1 = c(40, 50, 60, 70, 80),   
  subject2 = c(35, 45, 55, 65, 75),  
  subject3 = c(38, 48, 58, 68, 78),   
  subject4 = c(33, 34, 35, 36, 37),  
  subject5 = c(42, 52, 62, 72, 82) 
)

# 计算总分
df$total_score <- rowSums(df[, grepl("subject", names(df))])
# 计算低于33分的科目数量
df$failed_subjects <- rowSums(df[, grepl("subject", names(df))] < 33)
# 按规则判定等级
df$grade <- ifelse(df$total_score > 200 & df$failed_subjects == 0, "PASSED",
                   ifelse(df$total_score > 200 & df$failed_subjects %in% 1:2, "ER",
                          "FAILED"))

# 查看结果
print(df)

结果说明

运行代码后,数据框会新增total_score(总分)、failed_subjects(低于33分的科目数)和grade(等级)三列。针对示例数据,最终结果为:

  • 学生a:总分188≤200 → FAILED
  • 学生b、c、d、e:总分均大于200且无低于33分的科目 → PASSED

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 17:53:16