如何用R将数据框含Stocker的Job.tittle字段替换后生成新列?
解决R中gsub替换包含特定关键词的字符串问题
原代码的问题
- 正则表达式过于限定:你写的
"\bDW Overnight Stockers\w+"只针对"DW Overnight Stockers"这个特定字符串,完全覆盖不到数据里的"TH Stockers"、"CM Midland Stockers"这类目标字符串 - 转义字符错误:R中正则的转义符需要用双反斜杠,
\b应写为\\b,\w应写为\\w,但即使修正转义,这个正则也不符合你的需求
正确的实现方案
方案一:直接用gsub匹配替换
使用更通用的正则表达式,匹配所有包含Stocker或Stockers的字符串,直接替换为Stocker:
x <- data.frame(Job.tittle=c("DW Overnight Stockers", "Checkers","TH Stockers", "CM Midland Stockers"), Head.counts=c(100,50,100,200)) x$job.title.2 <- gsub(".*Stockers?", "Stocker", x$Job.tittle)
.*:匹配任意数量的任意字符(包括0个)Stockers?:匹配Stocker或Stockers(?表示前面的s是可选的)- 整个正则会匹配所有包含
Stocker相关关键词的完整字符串,并替换为Stocker
方案二:先判断再赋值(更直观)
先将原列内容复制到新列,再筛选出包含目标关键词的行进行替换:
x <- data.frame(Job.tittle=c("DW Overnight Stockers", "Checkers","TH Stockers", "CM Midland Stockers"), Head.counts=c(100,50,100,200)) x$job.title.2 <- x$Job.tittle # 找出包含Stocker/Stockers的行并替换 x$job.title.2[grepl("Stockers?", x$Job.tittle)] <- "Stocker"
grepl("Stockers?", x$Job.tittle):返回逻辑向量,标记哪些行的职位名称包含目标关键词- 通过索引直接修改这些行的新列值为
Stocker
运行结果
执行上述代码后,数据框x的job.title.2列结果为:"Stocker", "Checkers", "Stocker", "Stocker",完全符合需求
内容的提问来源于stack exchange,提问作者Jorge Enrique Rangel
相关产品推荐
相关产品推荐

