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

R语言基于两列字符串匹配新增列(兼容NA值)实现方法

R中基于多列联合正则匹配新增岗位标识列方案

需求说明

现有人员岗位数据集结构如下:

NAME         JOB TITLE           ROLE DESCRIPTION
Mark         Cyber specialist    N/A
Peter        Manager             Manager with focus on cyber
Steven       CFO                 N/A
Lucas        VP                  General manager technology safety

需要新增Cyber Job列标识岗位是否为网络相关:

  • Mark、Peter、Lucas所在行值为1(代表网络相关)
  • 判断逻辑需同时参考JOB TITLE、ROLE DESCRIPTION两列内容,兼容字段存在N/A/空值的场景
    已知单列正则匹配实现代码如下,缺少两列联合判断的写法:
pattern <- paste(c("cyber", "Cyber", "technology", "Technology", "computer", "Computer"), collapse = "|")
df <- df %>% 
  mutate(`Cyber Job` = ifelse(str_detect('column', pattern), 1, 0))

实现代码

先优化匹配规则:正则匹配开启忽略大小写参数,无需手动枚举关键词的大小写变体,简化代码。两列判断采用任意一列命中关键词即标记为1的逻辑,同时对匹配产生的NA值做兜底处理,避免字段为N/A时计算出错。

library(tidyverse)

# 定义匹配规则,忽略大小写
match_pattern <- regex("cyber|technology|computer", ignore_case = TRUE)

df <- df %>%
  mutate(
    # 两列做逻辑或判断,任意一列命中即为TRUE,转整数后TRUE对应1、FALSE对应0
    `Cyber Job` = as.integer(
      str_detect(`JOB TITLE`, match_pattern) | str_detect(`ROLE DESCRIPTION`, match_pattern)
    ),
    # 字段为N/A导致的匹配结果NA,统一替换为0(未命中)
    `Cyber Job` = replace_na(`Cyber Job`, 0)
  )

结果验证

运行代码后输出完全符合预期:

  • Mark:JOB TITLE含"Cyber"命中,标记为1
  • Peter:ROLE DESCRIPTION含"cyber"命中,标记为1
  • Lucas:ROLE DESCRIPTION含"technology"命中,标记为1
  • Steven:两列均无匹配关键词,标记为0
  • 所有N/A字段不会触发报错,均按未命中关键词正常处理。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 09:42:24