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

R语言条件for循环问题:在数据框中搜索值及值组合

解决你的HR数据框循环问题

刚接触for循环踩坑太正常啦,我帮你梳理下思路,结合你的示例数据框来实现需求——根据Risk列的条件生成风险描述,再把这些描述作为新行添加到原数据框里。

首先先把你的示例数据框再明确下:

Repeat <- c("First","Second","Second","First","Second","Second")
Risk <- c(50,20,70,40,80,20)
df1 <- data.frame(Repeat,Risk)

第一步:定义风险判断规则

先假设你的条件是这样(你可以根据实际需求随意调整):

  • 当 Risk > 60 时,返回**"高风险HR"**
  • 当 30 ≤ Risk ≤ 60 时,返回**"中风险HR"**
  • 当 Risk < 30 时,返回**"低风险HR"**

第二步:用for循环实现需求

我们可以先创建一个空数据框来存储要添加的新行,然后遍历原数据框的每一行,判断Risk值生成对应描述,再把描述整理成行添加到空数据框,最后合并原数据框和新行数据框,实现原行和描述行交替排列的效果:

# 创建空数据框用于存储新行
new_rows <- data.frame(Repeat = character(), Risk = character(), stringsAsFactors = FALSE)

# 遍历原数据框的每一行
for (i in 1:nrow(df1)) {
  current_risk <- df1$Risk[i]
  # 根据风险值生成描述
  if (current_risk > 60) {
    risk_desc <- "高风险HR"
  } else if (current_risk >= 30) {
    risk_desc <- "中风险HR"
  } else {
    risk_desc <- "低风险HR"
  }
  # 将描述整理成新行,Repeat列标记为"风险描述",Risk列放描述内容
  new_row <- data.frame(Repeat = "风险描述", Risk = risk_desc, stringsAsFactors = FALSE)
  # 添加到new_rows中
  new_rows <- rbind(new_rows, new_row)
}

# 合并原数据框和新行数据框,实现原行1、描述行1、原行2、描述行2的顺序
combined_index <- c(rbind(1:nrow(df1), (nrow(df1)+1):(nrow(df1)+nrow(new_rows))))
df_combined <- rbind(df1, new_rows)[combined_index, ]

# 查看最终结果
print(df_combined)

第三步:更高效的R风格实现(推荐)

其实在R里,我们完全可以不用for循环,用向量化操作来实现,代码更简洁高效。这里推荐用dplyr和tidyr包来完成:

library(dplyr)
library(tidyr)

# 先给原数据框添加风险描述列
df1_with_desc <- df1 %>%
  mutate(Risk_Desc = case_when(
    Risk > 60 ~ "高风险HR",
    Risk >= 30 ~ "中风险HR",
    TRUE ~ "低风险HR"
  ))

# 将描述转换为新行,实现交替排列的效果
df_combined <- df1_with_desc %>%
  pivot_longer(cols = c(Risk, Risk_Desc), names_to = "Repeat", values_to = "Risk") %>%
  select(Repeat, Risk)

# 查看结果
print(df_combined)

你可以根据自己的实际业务需求,修改Risk的阈值或者风险描述的内容,调整起来非常灵活。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 09:47:21