使用r中的gsub基于正则表达式修改数据帧

时间:2016-10-17 17:19:08

标签: r string character gsub

我一直在匹配数据帧中两个向量之间的文本字符串。有几个值只有三个字符,并且在另一个字符串中与另一个字的一部分匹配。我想找到这个的正则表达式。这是一个例子:

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)

但我运气不好。显然有些不对劲,有人可以帮助我获得理想的结果吗?任何建议或建议将不胜感激。感谢。

1 个答案:

答案 0 :(得分:0)

基于@David Arenburg上面的评论,这个问题的一般解决方案是:

b[!stri_detect_regex(a, paste0("\\b", b, "\\b"))] <- ""

根据需要编辑b列中的元素。