R将数据帧中匹配的字符串替换为来自另一个具有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)

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

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

例如:如果我想用"OK"替换"abc01"one_answers"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(。

这里有一个想法(没有注释中的那么巧妙(。这样做的作用是,它基本上将df1$text的最后一个字替换为匹配的df2$symboldf2$value

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" 

附言:我从这里借了sub('^.* ([[:alnum:]]+)$', '\1', i)

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

感谢Jota提供的解决方案。

相关内容

  • 没有找到相关文章

最新更新