R中使用str_detect嵌套ifelse匹配多关键词如何简化代码?
R语言多关键词匹配简化方案
核心思路
str_detect()本身支持正则表达式的「或」逻辑,不需要嵌套多层ifelse(),你可以把所有需要匹配的关键词统一整理为向量,一次完成匹配。
最简实现代码
library(dplyr) library(stringr) # 1. 统一维护所有需要匹配的关键词,后续新增直接往向量里加即可 match_keywords <- c("POLICE", "FIREFIGHTER", "DETECTIVE", "PUBLIC SAFETY", "CAPTAIN") # 2. 拼接为正则或模式,关键词含正则特殊字符时可给每个元素套str_escape()避免错误 match_pattern <- str_c(match_keywords, collapse = "|") # 3. 单次判断即可完成赋值(顺便修正原代码里最后一处误写的t1$JOB_TITLE) df$function_YN <- ifelse(str_detect(df$JOB_TITLE, match_pattern), "YES", "NO")
可选拓展写法(适配dplyr管道流)
如果习惯用dplyr的管道操作,可以用mutate + case_when的组合,后续如果需要给不同关键词匹配不同返回值时拓展性更强:
df <- df %>% mutate(function_YN = case_when( str_detect(JOB_TITLE, match_pattern) ~ "YES", .default = "NO" ))
注意事项
- 如果需要忽略大小写匹配,可以把匹配模式替换为
regex(match_pattern, ignore_case = TRUE) - 如果关键词包含
.、*、+这类正则特殊符号,生成模式时改为str_c(str_escape(match_keywords), collapse = "|")即可避免匹配异常
内容的提问来源于stack exchange,提问作者SilverSpringbb
相关产品推荐
相关产品推荐

