R语言if else语句报错修复与危害等级数据合并到dataframe求助
R语言危害等级判定代码修复方案
报错根因
代码报错由3个语法/拼写问题导致:
- 长度函数拼写错误:
length()被误写为lenght() - 多分支判断语法错误:R中分支关键字为分开的
else if,不支持连写的elseif - 变量名大小写不一致:初始化的空向量为
Hazard_level,后续赋值时误写为Hazard_Level,属于两个完全独立的变量,最终生成的向量长度和原数据集23行不匹配,导致合并时报行数不一致错误
修复后的循环实现
# 初始化空向量 Hazard_level <- c() # 修正拼写、语法和变量名问题 for(i in 1:length(data$Risk_value)){ if(data$Risk_value[i] < 10){ Hazard_level <- append(Hazard_level, 'I') } else if(data$Risk_value[i] < 100){ Hazard_level <- append(Hazard_level, 'II') } else if(data$Risk_value[i] < 1000){ Hazard_level <- append(Hazard_level, 'III') } else{ Hazard_level <- append(Hazard_level, 'IV') } } # 直接把结果赋值到原数据集新列,无需单独生成数据框再合并 data$Hazard_level <- Hazard_level
更高效的向量化实现(无需循环,推荐)
R中处理分箱问题直接用cut()函数即可,代码更简洁运行效率更高:
data$Hazard_level <- cut( data$Risk_value, breaks = c(-Inf, 10, 100, 1000, Inf), labels = c("I", "II", "III", "IV"), right = TRUE # 表示区间右闭,符合<10、<100的判定规则 )
运行后新列Hazard_level会直接添加到原数据集data中,无需额外合并操作。
内容的提问来源于stack exchange,提问作者Kazi
相关产品推荐
相关产品推荐

