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

时间:2018-10-10 17:29:30

标签: r str-replace

我正在测试str_replace_all软件包中的stringr功能。请参见下面的代码。

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" 

但是,如您在上方看到的输出,它将再次用“ darkkhaki”和“ burlywood1”替换“ coral”中的“ c”和“ a”。 (如果仔细看,仍然还有“或”和“ l”)。如果我仅在originalString<-c("1","2","3")中使用数字,则可以得到期望的正确替换。但是,我不知道为什么str_replace_all再次替换“珊瑚”中的“ c”和“ a”,它们已经被替换了。有什么解决方案可以解决这个问题?

1 个答案:

答案 0 :(得分:1)

str.replace通过字符串,模式和替换进行矢量化处理。意思是,它在第​​一个字符串中搜索第一个模式,如果找到它,则应用第一个替换,然后移至第二个字符串,寻找第二个模式(仅),如果找到它,则应用第二个模式更换等。

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

您可能会考虑的另一种选择是qdap::multigsub,它的名称基本上是这样的:多个gsub grep-and-replaces:

multigsub(originalString, patternColor, subsetColNameChar)