我有一段很长的string
(不是vector
string
,只有一个string
)。我希望在substring
中多次发现某个string
,并将其替换为substring
,加上character vector
中的元素。我想这样做,以便第一个substring
替换为element
的第一个vector
,第二个substring
由第二个元素等替换。
例如输入:
Stg<-c("cat fish dog cat fish dog cat fish dog cat fish dog")
Vec<-c(" one"," two"," red"," blue")
我想找到“cat”并将其替换为“cat”加上来自Vec
的数据,以便输出
"cat one fish dog cat two fish dog cat red fish dog cat blue fish dog"
然而,在我的真实string
中,我正在寻找的文本分散在各处(不是常规数量的字符或单词或实例之间的任何内容)。
似乎有几种方法可以从strigr
或stringi
执行此操作,这将产生4个向量,每个向量都替换为Vec
的不同成员,但我只想找到一个作为输出。
答案 0 :(得分:2)
使用regmatches<-
:
regmatches(Stg,gregexpr("cat",Stg)) <- list(paste0("cat",Vec))
Stg
#[1] "cat one fish dog cat two fish dog cat red fish dog cat blue fish dog"
这与上一个问题非常相似:Replacing elements of a vector
如果您不想覆盖原始Stg
向量,请使用以下代码:
`regmatches<-`(Stg, gregexpr("cat",Stg), value=list(paste0("cat",Vec)))
答案 1 :(得分:2)
现在我看到@ thelatemail的答案,这是一个不太酷的方法:
word <- "cat"
do.call(sprintf, c(list(gsub(word, "%s", Stg)), paste0(word, Vec)))
## [1] "cat one fish dog cat two fish dog cat red fish dog cat blue fish dog"