R将数据帧中的字符串匹配替换为具有gsub的另一个数据帧中的值

时间:2016-08-04 10:13:11

标签: r dataframe string-matching gsub

text = c("Hello abc01","Go to abc02")
value = c(0,1)
symbol=c("abc01","abc02")
df1 = data.frame(text)
df2 = data.frame(symbol,value)

我想将df1中包含为文本的符号替换为df2中的相应值,以获取:'Hello 0', 'Go to 1'

通常对于字符串替换我使用gsub(pattern,replacement,x)

例如:如果我想用“OK”替换“abc01”和“abc02”:

df1 = apply(df1,2,function(x) gsub("abc[0-9]{2}","OK",x))

我的想法是在替换部分中使用一个函数:

gsub(df1,2,function(x) gsub("(abc)", Support(KKK),x)

我将进行替换,但我不知道如何传递作为参数KKK,匹配字符串确定(abc01,abc02)。

2 个答案:

答案 0 :(得分:0)

这是一个想法(不像评论中那样灵巧)。这样做,它基本上用匹配的df1$text

df2$value取代df2$symbol的最后一个单词
sapply(df1$text, function(i) 
       gsub(paste(df2$symbol, collapse = '|'), 
                df2$value[match(sub('^.* ([[:alnum:]]+)$', '\\1', i), df2$symbol)], i))

#[1] "Hello 0" "Go to 1" 

P.S。我从here

借用了sub('^.* ([[:alnum:]]+)$', '\\1', i)

答案 1 :(得分:0)

df1[["text"]] <- stri_replace_all_fixed(text, symbol, value, vectorize_all = FALSE)

感谢Jota的解决方案。