在 r 中使用 gsub 修改基于正则表达式的数据框
modify data frame based on regex using gsub in r
我一直在匹配数据框中两个向量之间的文本字符串。多个值恰好包含三个字符,并且作为其他字符串中另一个单词的一部分进行匹配。我想为此找到正则表达式。这是一个例子:
a <- c("urban", "crabtree", "rba", "rba hks","barbara", "lederbach")
b <- c("rba", "rba", "rba", "rba", "rba", "rba")
df <- data.frame(a, b)
我想用空白 space(即“”)代替 "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)
但我运气不佳。显然有些不对劲,有人可以帮我得到想要的结果吗?任何意见或建议将不胜感激。谢谢
根据@David Arenburg 上面的评论,这个问题的一般解决方案是:
b[!stri_detect_regex(a, paste0("\b", b, "\b"))] <- ""
根据需要编辑 b 列中的元素。
我一直在匹配数据框中两个向量之间的文本字符串。多个值恰好包含三个字符,并且作为其他字符串中另一个单词的一部分进行匹配。我想为此找到正则表达式。这是一个例子:
a <- c("urban", "crabtree", "rba", "rba hks","barbara", "lederbach")
b <- c("rba", "rba", "rba", "rba", "rba", "rba")
df <- data.frame(a, b)
我想用空白 space(即“”)代替 "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)
但我运气不佳。显然有些不对劲,有人可以帮我得到想要的结果吗?任何意见或建议将不胜感激。谢谢
根据@David Arenburg 上面的评论,这个问题的一般解决方案是:
b[!stri_detect_regex(a, paste0("\b", b, "\b"))] <- ""
根据需要编辑 b 列中的元素。