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

R语言使用for循环结合if/else为列分配级别时赋值结果异常

问题根源

你代码的核心错误有两个:

  1. 区间范围写错:你想匹配2-3顺位的top 3分支,错误把上限设成了30,导致所有2-30顺位的数值都会直接命中这个分支
  2. 多分支判断顺序逻辑错误:if-else if是按顺序匹配的,只要命中前面的分支就不会再走后面的判断,你把覆盖范围更大的分支放在了细分区间的前面,就算你改对了top3的区间上限,后续的其他细分区间也永远不会被触发。
    另外你用行遍历for循环处理这类分箱操作效率极低,也容易出现索引引用错误。

修复方案

方案1:直接修正原逻辑(不推荐,仅做对照)

先把top 3的区间修正为2-3,再按顺位从小到大的顺序排列分支即可:

for(i in 1:nrow(draft_raptor)){
  pick_num <- draft_raptor[i,24]
  if(pick_num == 1){
    draft_raptor[i,27] <- "top pick"
  } else if(pick_num >=2 & pick_num <=3){
    draft_raptor[i,27] <- "top 3"
  } else if(pick_num >=4 & pick_num <=5){
    draft_raptor[i,27] <- "top 5"
  } else if(pick_num >=6 & pick_num <=10){
    draft_raptor[i,27] <- "top 10"
  } else if(pick_num >=11 & pick_num <=14){
    draft_raptor[i,27] <- "late lottery"
  } else if(pick_num >=15 & pick_num <=23){
    draft_raptor[i,27] <- "mid 1st round"
  } else if(pick_num >=24 & pick_num <=30){
    draft_raptor[i,27] <- "late first"
  } else if(pick_num >=31 & pick_num <=40){
    draft_raptor[i,27] <- "early 2nd"
  } else if(pick_num >=41 & pick_num <=50){
    draft_raptor[i,27] <- "mid 2nd"
  } else if(pick_num >=51 & pick_num <=60){
    draft_raptor[i,27] <- "late 2nd"
  }
}

方案2:用dplyr::case_when做向量化分箱(推荐)

不用写循环,代码更简洁易读,运行效率也高:

library(dplyr)
draft_raptor <- draft_raptor %>%
  mutate(
    draft_level = case_when(
      numberPickOverall == 1 ~ "top pick",
      numberPickOverall %in% 2:3 ~ "top 3",
      numberPickOverall %in% 4:5 ~ "top 5",
      numberPickOverall %in% 6:10 ~ "top 10",
      numberPickOverall %in% 11:14 ~ "late lottery",
      numberPickOverall %in% 15:23 ~ "mid 1st round",
      numberPickOverall %in% 24:30 ~ "late first",
      numberPickOverall %in% 31:40 ~ "early 2nd",
      numberPickOverall %in% 41:50 ~ "mid 2nd",
      numberPickOverall %in% 51:60 ~ "late 2nd"
    )
  )

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 18:36:05