str_replace_all 正在替换已经被替换的字符

str_replace_all is replacing character which was replaced already

我正在测试 stringr 包中的 str_replace_all 功能。请看下面的代码。

library(stringr) 
originalString<-c("d", "a", "c")
patternColor=c("coral", "burlywood1", "darkkhaki")
names(patternColor)<-originalString
subsetColNameChar<-c("d", "d", "a", "a", "c", "c")
replaceOut<-str_replace_all(subsetColNameChar, patternColor)
replaceOut
[1] "darkkhakiorburlywood1l" "darkkhakiorburlywood1l" "burlywood1" "burlywood1"  "darkkhaki"  "darkkhaki" 

预期的输出应该是:

[1] "coral" "coral" "burlywood1" "burlywood1" "darkkhaki" "darkkhaki" 

但是,正如您在上面看到的输出,它再次将 "coral" 中的 "c" 和 "a" 替换为 "darkkhaki" 和 "burlywood1"。 (仔细看,还剩下"or"和"l")。如果我只使用 originalString<-c("1","2","3") 中的数字,我可以按预期获得正确的替换。但是,我不知道为什么 str_replace_all 又要替换 "coral" 中的 "c" 和 "a",它们已经被替换了。有什么办法可以解决这个问题?

str.replace 在字符串、模式和替换上进行矢量化。意思是,它搜索第一个字符串中的第一个模式,如果找到它,应用第一个替换,然后移动到第二个字符串,查找第二个模式(仅),如果找到它,应用第二个更换等

当您将命名向量作为模式传递给 str.replace.all 时,它会在每个字符串元素上循环整个模式向量,给出您看到的结果。

您可能会考虑的一个替代方案是 qdap::multigsub,它的作用基本上如其名称所示:多个 gsub grep-and-replaces:

multigsub(originalString, patternColor, subsetColNameChar)