R语言嵌套for循环追加IMC值到向量并生成分类列问题求助
问题原因
- 你每次循环时都直接用
IMC_values = c(单个计算值)覆盖了原有向量,没有实现追加效果,每次IMC_values都只有当前行的单个IMC值 - 赋值
dados$Gr_IMC = 分类值时是对整个列统一赋值,每次判断都会覆盖所有行的结果,最终整列取值等于最后一次循环对应的分类
方案1:按照你的循环逻辑修正
先初始化空的IMC向量和分类向量,循环里逐行追加,最后把分类向量赋值给数据框列即可:
# 初始化空向量 IMC_values <- c() Gr_IMC <- c() # 循环遍历每一行 for (j in 1:nrow(dados)) { # 计算当前行IMC,追加到向量末尾 imc <- dados$Peso[j] / (dados$Altura[j]^2) * 10000 IMC_values <- c(IMC_values, imc) # 判断分类,追加到分类向量末尾 if (imc < 18.5) { gr <- "Abaixo do peso ideal" } else if (imc >= 18.5 && imc < 25) { gr <- "Peso normal" } else if (imc >= 25 && imc < 30) { gr <- "Acima do peso ideal" } else { gr <- "Obesidade" } Gr_IMC <- c(Gr_IMC, gr) } # 把分类向量赋值给数据框的新列 dados$Gr_IMC <- Gr_IMC
方案2:更高效的R向量化操作(推荐)
R支持直接整列计算、批量分类,不需要写嵌套循环,运行效率更高、代码更简洁:
# 直接整列计算IMC并存储到新列 dados$IMC <- dados$Peso / (dados$Altura^2) * 10000 # 用cut函数批量完成区间分类 dados$Gr_IMC <- cut( dados$IMC, breaks = c(-Inf, 18.5, 25, 30, Inf), labels = c("Abaixo do peso ideal", "Peso normal", "Acima do peso ideal", "Obesidade"), right = FALSE )
内容的提问来源于stack exchange,提问作者user17153595
相关产品推荐
相关产品推荐

