我正在测试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”,它们已经被替换了。有什么解决方案可以解决这个问题?
答案 0 :(得分:1)
str.replace
通过字符串,模式和替换进行矢量化处理。意思是,它在第一个字符串中搜索第一个模式,如果找到它,则应用第一个替换,然后移至第二个字符串,寻找第二个模式(仅),如果找到它,则应用第二个模式更换等。
当您将命名矢量作为模式传递给str.replace.all
时,它将在每个字符串元素上循环整个模式矢量,从而为您提供看到的结果。
您可能会考虑的另一种选择是qdap::multigsub
,它的名称基本上是这样的:多个gsub grep-and-replaces:
multigsub(originalString, patternColor, subsetColNameChar)