【问题标题】:Issue with gsub and str_replace_all in RR中的gsub和str_replace_all问题
【发布时间】:2019-11-22 14:58:35
【问题描述】:

我需要用"apple""banana"等正则表达式替换下面格式"IDENTIFIER:ABC:DEF", "IDENTIFIER:GHI:JKL"等的38种不同类型的表达式。我尝试使用以下格式的 str_replace_all:

    df$column <- df$column %>% str_replace_all("IDENTIFIER:ABC:DEF", "apple")
    df$column <- df$column %>% str_replace_all("IDENTIFIER:GHI:JKL", "banana")

但是,出于某种原因,R 只处理了我大约一半的请求。我检查并仔细检查了错误并尝试分解代码但没有成功。

然后我用 gsub 尝试了同样的方法:

    df$column <- gsub(df$column, "IDENTIFIER:ABC:DEF", "apple") 
    df$column <- gsub(df$column, "IDENTIFIER:GHI:JKL", "banana") 

我收到此错误:“在 gsub(df$column ...) 中:参数 'pattern' 的长度 > 1,并且只会使用第一个元素”。

我真的不知道下一步该做什么。有什么建议吗?

【问题讨论】:

  • gsub 需要提供模式、replacement_values 和 x。所以,在你的情况下,你应该写gsub("IDENTIFIER:ABC:DEF", "apple",df$column)gsub(pattern = "IDENTIFIER:ABC:DEF", replacement = "apple", x = df$column)
  • 比较两个函数的文档:它们的参数顺序不同
  • 谢谢@dc37 - 那是错误

标签: r


【解决方案1】:

同名包中的gsubfn 提供了gsub 功能的超集,特别是它可以选择将列表作为替换而不是字符串。对于正则表达式的每个匹配项,如果匹配项等于列表名称之一,则将其替换为相应的列表值。

library(gsubfn)

x <- "xyz IDENTIFIER:ABC:DEF abc IDENTIFIER:GHI:JKL def" # test input
L <- list("IDENTIFIER:ABC:DEF" = "apple", "IDENTIFIER:GHI:JKL" = "banana")
gsubfn("\\y\\S+\\y", L, x)   
## [1] "xyz apple abc banana def"

这也有效:

gsubfn("\\b\\S+\\b", L, x, perl = TRUE)   
## [1] "xyz apple abc banana def"

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-06-14
    • 1970-01-01
    • 1970-01-01
    • 2013-02-03
    • 2021-06-01
    相关资源
    最近更新 更多