【问题标题】:modify data frame based on regex using gsub in r在 r 中使用 gsub 基于正则表达式修改数据框
【发布时间】:2016-10-17 17:19:07
【问题描述】:

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

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)

但我运气不佳。显然有些不对劲,有人可以帮我得到想要的结果吗?任何意见或建议将不胜感激。谢谢。

【问题讨论】:

  • b 列的用途是什么?像a[!grepl("\\brba\\b", a)] &lt;- "" 这样的东西不行吗?
  • @DavidArenburg b 列是匹配列。因此,从更大的数据框中,“rba”是与 a 列中的字符串最匹配的字符串。所以我想保留b列,但我想让它看起来像上面的“最终”向量。
  • 这行得通library(stringi) ; a[!stri_detect_regex(a, paste0("\\b", b, "\\b"))] &lt;- "" 吗?
  • 就像我说的,它很笼统。它使用两列,它允许灵活的正则表达式。除此之外,我无法再猜测了。也许其他人可以

标签: r string character gsub


【解决方案1】:

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-11-19
    • 2014-04-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-13
    • 1970-01-01
    相关资源
    最近更新 更多