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

R语言基于数据框两列信息创建新列 实现指定值提取映射

问题根源

原代码对B列的处理逻辑不符合规则:你直接用正则从B列字符串中提取emp|man子串,但B列的floor取值里根本不存在man字符片段,自然提取结果为NA,无法得到预期的man返回值。

修正代码

按照你定的优先级规则,A列优先做正则提取,A列无匹配时对B列做精确值映射即可,不要对B列用正则模糊提取:

library(dplyr)
library(stringr)

df <- df %>%
  mutate(
    C = coalesce(
      # 第一步:优先提取A列中的emp/man
      str_extract(A, "emp|man"),
      # 第二步:A列无匹配时,按B列固定映射规则取值
      case_when(
        B == "employee" ~ "emp",
        B == "floor" ~ "man"
      )
    )
  )
效果说明
  • 完全遵循优先级:A列能提取到emp/man时,直接用A列结果,不会读取B列
  • B列处理用精确值匹配,不会出现floor无法匹配到man的问题
  • 只要你的B列取值仅包含employee/floor两类,最终C列不会出现任何NA值,可以运行sum(is.na(df$C))验证,返回值为0即符合要求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 18:31:14