【发布时间】:2018-10-10 17:29:29
【问题描述】:
我正在测试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 再次替换“珊瑚”中的“c”和“a”,它们已经被替换了。有什么办法可以解决这个问题?
【问题讨论】:
-
来自 str_replace 的文档:“要在字符串的每个元素中执行多个替换,请将命名向量 (c(pattern1 = replacement1)) 传递给 str_replace_all。”。也就是说,
str_replace中需要有一个未命名的模式向量和一个未命名的替换向量 -
你必须检查函数是如何工作的。试试
str_replace_all(subsetColNameChar, c("c"="darkkhaki", "a"="burlywood1", "d"="coral"))和str_replace_all(subsetColNameChar, c("d"="coral", "a"="burlywood1", "c"="darkkhaki"))这两个版本,你会发现它是按顺序工作的。这就是为什么有些模式会再次被替换。 -
iod,谢谢您的解释。你说的对。我传递了命名模式向量,因为我想通过 str_replace_all 执行多次替换。
-
AntoniosK,谢谢你的回答。我运行了您提供的两个版本,并且理解得更好。
标签: r str-replace