R语言str_detect结合ifelse双列匹配新增列报错问题
代码报错原因
原代码两处问题导致结果不符合预期:
str_detect()的第一个入参仅支持传入待匹配的字符列,直接在参数内写RoleName|FulltextDescription属于语法错误,无法实现“两列任意一列匹配即命中”的逻辑- 手动罗列关键词的大小写变体属于冗余写法,可通过正则的忽略大小写参数简化规则,减少漏配概率
可直接运行的正确代码
通用兼容写法(所有dplyr/stringr版本均支持)
# 定义匹配规则,匹配时自动忽略大小写,无需手动写大小写变体 match_pattern <- regex("cyber|technology|computer", ignore_case = TRUE) IPEm <- IPEm %>% mutate( `Cyber Job` = as.integer( str_detect(RoleName, match_pattern) | str_detect(FulltextDescription, match_pattern) ) )
逻辑说明:分别对RoleName、FulltextDescription两列做关键词匹配,只要任意一列命中规则,逻辑结果为TRUE,转成整数后取值为1;两列都不命中时逻辑结果为FALSE,转成整数后取值为0,完全覆盖“RoleName仅标注VP但FulltextDescription说明是网络岗”的场景。
精简写法(dplyr 1.0.0及以上版本支持)
如果使用的dplyr版本较新,可以用if_any简化多列匹配的写法,逻辑和上面完全一致:
match_pattern <- regex("cyber|technology|computer", ignore_case = TRUE) IPEm <- IPEm %>% mutate(`Cyber Job` = as.integer(if_any(c(RoleName, FulltextDescription), ~str_detect(.x, match_pattern))))
内容的提问来源于stack exchange,提问作者Robbert
相关产品推荐
相关产品推荐

