2017-10-09 63 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。這將很難調試並且難以擴展。