2017-10-09 61 views
1

我想部分替换名为“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) 
+0

@Gregor - 谢谢你有用的见解,我没有考虑过使用for循环操作。我仍然在开发我的R技能,因为我现在的代码这个解决方案应该足够了 – user104435

回答

1

gsub没有通过搜索字符串向量化,它只能一次处理一个字符。所以你需要使用一个循环像

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

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

我还会说,无论你在R中做什么都比用gsub进行查找/替换要好,几乎肯定会有更好的方法,大概会跟着一些eval(parse()) ing。这将很难调试并且难以扩展。