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

如何在R中实现数值到指定字母标识的映射分配?

错误原因

你代码的核心问题有两个:

  • R中基础的if/else语句只能处理长度为1的判断条件,你传入了长度为20的matik向量,所以只会取第一个元素判断,输出结果自然不对
  • 判断数值是否属于某个区间/向量不能用==,应该用%in%运算符,否则会触发长度不匹配的警告

解决方案1:遍历判断(适合初学者理解)

直接循环遍历matik里的每一个数值,逐个判断分类:

matik = c(70, 25, 78, 90, 67, 77, 83, 99, 45, 76, 45, 24, 55, 70, 65, 75, 68,89,55,68)
# 初始化结果向量
result = character(length(matik))

for (i in seq_along(matik)) {
  num = matik[i]
  if (num >= 81) {
    result[i] = "A"
  } else if (num %in% 71:80) {
    result[i] = "AB"
  } else if (num %in% 66:70) {
    result[i] = "B"
  } else if (num %in% 61:65) {
    result[i] = "BC"
  } else if (num %in% 56:60) {
    result[i] = "C"
  } else if (num %in% 41:55) {
    result[i] = "D"
  } else {
    result[i] = "E"
  }
}

print(result)

运行后输出的分类结果和matik的数值是一一对应的。

解决方案2:使用cut函数(R原生分箱方法,更简洁)

cut是R专门用来给数值分区间打标签的函数,不用写循环和多层判断:

matik = c(70, 25, 78, 90, 67, 77, 83, 99, 45, 76, 45, 24, 55, 70, 65, 75, 68,89,55,68)
# 设置区间断点,right=FALSE表示区间左闭右开,符合你的规则
result = cut(matik, 
             breaks = c(-Inf, 40, 55, 60, 65, 70, 80, Inf),
             labels = c("E", "D", "C", "BC", "B", "AB", "A"),
             right = FALSE)
# 转成字符向量输出
result = as.character(result)
print(result)

两种方法得到的结果完全一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 10:39:04