如何在R中的字符串中替换多个字符?

时间:2019-04-08 00:07:12

标签: r

假设我有一个像这样的字符串:

s <- "a bc de fg hij klmn 123 45 789"

还有一个字符向量:

c <- c("a-b", "g-h", "j-k", "x-z", "y-5", "3-4")

我想要的是用c的"a b"中的字符代替s中的"a-b"这样的字符。所需的输出将是:

new_s<-"a-bc de fg-hij-klmn 123-45 789"

1 个答案:

答案 0 :(得分:2)

一种选择是使用gsubfn

library(gsubfn)
gsubfn("\\w\\s\\w", setNames(as.list(c), sapply(c, function(x) gsub("-", " ", x))), s)
#[1] "a-bc de fg-hij-klmn 123-45 789"

说明:我们匹配\\w\\s\\w并将其替换为list

中指定的模式
setNames(as.list(c), sapply(c, function(x) gsub("-", " ", x)))
#$`a b`
#[1] "a-b"
#
#$`g h`
#[1] "g-h"
#
#$`j k`
#[1] "j-k"
#
#$`x z`
#[1] "x-z"
#
#$`y 5`
#[1] "y-5"
#
#$`3 4`
#[1] "3-4"

或更短(感谢@ Wen-Ben)

gsubfn("\\w\\s\\w", setNames(as.list(c), gsub("-", " ", c)), s)