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

R中使用带If/Else的For循环为DataFrame新增成绩等级列求助

问题原因

你当前循环中的i只是从Result向量中读取的临时副本,对i的赋值不会修改原向量的数值,自然无法将转换后的等级存入目标数据框。

解决方法

方法1:修改现有循环逻辑

保留你已经写好的判断规则,调整循环遍历方式,新增向量存储转换后的等级:

Result <- c(50,67,89,77,65,66,70,73,69,80)
# 新建等长空向量存储转换后的等级
grade <- character(length(Result))

# 遍历索引而非直接遍历数值
for (i in seq_along(Result)){
  score <- Result[i]
  if (score < 16.67) {
    grade[i] <- "G+"
  } else if (score < 26.67) {
    grade[i] <- "F+"
  } else if (score < 36.67) {
    grade[i] <- "E+"
  } else if (score < 40) {
    grade[i] <- "D+"
  } else if (score < 43.33) {
    grade[i] <- "D"
  } else if (score < 46.67) {
    grade[i] <- "D+"
  } else if (score < 50) {
    grade[i] <- "C-"
  } else if (score < 53.33) {
    grade[i] <- "D"
  } else if (score < 56.67) {
    grade[i] <- "D+"
  } else if (score < 60) {
    grade[i] <- "B-"
  } else if (score < 63.33) {
    grade[i] <- "B"
  } else if (score < 66.67) {
    grade[i] <- "B+"
  } else if (score < 70) {
    grade[i] <- "A-"
  } else if (score < 73.33) {
    grade[i] <- "A"
  } else if (score < 100) {
    grade[i] <- "A+"
  }
}

# 存入数据框
df <- data.frame(score = Result, grade = grade)

方法2:使用R原生cut函数(更适合大数据集)

R内置的cut函数专门用于数值分箱操作,代码更简洁,运行效率远高于自定义循环,完全适配你的需求:

Result <- c(50,67,89,77,65,66,70,73,69,80)
# 定义分数分界点
breaks <- c(-Inf,16.67,26.67,36.67,40,43.33,46.67,50,53.33,56.67,60,63.33,66.67,70,73.33,100)
# 定义对应等级,顺序与分界点间隔一一对应
labels <- c("G+","F+","E+","D+","D","D+","C-","D","D+","B-","B","B+","A-","A","A+")
# 完成分箱转换
grade <- cut(Result, breaks = breaks, labels = labels, right = FALSE)
# 存入数据框
df <- data.frame(score = Result, grade = grade)

注意事项

你现有代码中存在一处逻辑不一致:分数小于40的分支,print输出的是D-,但赋值为D+,可根据你实际的等级映射规则调整修正。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 06:45:01