如何用for循环将迭代结果追加到R语言的数据框中?
用for循环实现Z_SCORE判断并写入数据框comment列
你想要通过for循环遍历grade数据框的Z_SCORE列,将判断结果写入variables数据框的comment列,以下是修改后的实现方案:
现有代码问题分析
你的原代码仅打印判断结果,未将值存入variables$comment;同时初始赋值variables$comment<-data.frame()有误,应该先创建匹配长度的空向量来存储结果。
修改后的for循环代码
# 初始化与Z_SCORE列长度一致的空字符向量 variables$comment <- character(length(grade$Z_SCORE)) # 通过索引遍历,确保结果对应到正确行 for (i in seq_along(grade$Z_SCORE)) { z_val <- grade$Z_SCORE[i] if (z_val <= -0.5) { variables$comment[i] <- "good" } else if (z_val >= 0.5) { variables$comment[i] <- "bad" } else { variables$comment[i] <- "neutral" } }
代码说明
- 先初始化
variables$comment为和Z_SCORE列长度相同的字符向量,保证每个位置都能被正确赋值 - 使用
seq_along(grade$Z_SCORE)获取索引序列,而非直接遍历值,这样能精准对应variables$comment的每一行 - 每次循环取出当前Z值,判断后将结果赋值到
variables$comment的对应位置
期望输出示例
执行后variables数据框的comment列会得到:
Comment good good bad neutral
对比你提到的dplyr方法
你已经知道用dplyr的case_when可以更简洁实现:
A <- grades %>% mutate(comment = case_when( Z_SCORE <= -0.5 ~ "good", Z_SCORE >= 0.5 ~ "bad", TRUE ~ "neutral" ))
不过用for循环能更直观理解逐行处理的逻辑,适合入门学习。
内容的提问来源于stack exchange,提问作者thole
相关产品推荐
相关产品推荐

