我一直在匹配数据帧中两个向量之间的文本字符串。有几个值只有三个字符,并且在另一个字符串中与另一个字的一部分匹配。我想找到这个的正则表达式。这是一个例子:
a <- c("urban", "crabtree", "rba", "rba hks","barbara", "lederbach")
b <- c("rba", "rba", "rba", "rba", "rba", "rba")
df <- data.frame(a, b)
我想用空格(即“”)替换那些“rba”仅作为单词的一部分出现的值。所需的输出是:
b <- c("", "", "rba", "rba", "", "")
所以它有点像:
grep("\\b...\\b", df$a, value = TRUE)
但我想修改列b并在没有匹配的地方插入“”。
我知道%in%可用于完全匹配,但我希望使用gsub:
funb <- function(x) gsub("\\b...\\b", "", x)
df$b <- lapply(df$b, funb)
但我运气不好。显然有些不对劲,有人可以帮助我获得理想的结果吗?任何建议或建议将不胜感激。感谢。
答案 0 :(得分:0)
基于@David Arenburg上面的评论,这个问题的一般解决方案是:
b[!stri_detect_regex(a, paste0("\\b", b, "\\b"))] <- ""
根据需要编辑b列中的元素。