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)
我正在测试 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)