复杂的多模式替换

时间:2017-10-09 16:07:36

标签: r gsub stringr

我正在尝试部分替换名为“string1”的字符串中的文本。

“LocateMe”中包含多种模式,我想查找并替换为相同的文本字符串:“!= -9999”

多个模式非常复杂,包含特殊字符,例如“=”和“[”

是否可以使用gsub实现此目的,还是应该使用其他功能?任何指导都将不胜感激。

string1 <- "Birth == unique.combos[17,1] & hid_age == unique.combos[17,2] & z02_gender == unique.combos[17,3]"

LocateMe <- c("== unique.combos[37,1]", "== unique.combos[38,1]", "== unique.combos[39,1]", "== unique.combos[40,1]", "== unique.combos[41,1]", "== unique.combos[42,1]",
                "== unique.combos[17,1]", "== unique.combos[17,3]", "== unique.combos[18,3]")


string2 <- gsub(LocateMe, "!= -9999", string1)

1 个答案:

答案 0 :(得分:1)

gsub不会在搜索字符串上进行矢量化,它一次只能使用一个。所以你需要使用像

这样的循环
string2 <- string1
for (i in seq_along(LocateMe)) {
  string2 <- gsub(LocateMe[i], "!= -9999", string2, fixed = TRUE)
}

使用fixed = T可以防止括号,逗号和点被解释为特殊字符。

我还会说,几乎可以肯定有更好的方法来做你在R中尝试做的事情而不是使用gsub进行查找/替换,可能后面跟着一些{{1 }} ING。这将很难调试,难以扩展。