2016-08-04 33 views
0
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的符号,以获得取代的字串比对在数据帧从数据帧的另一个。R 3与值与GSUB

通常用于字符串替换我使用GSUB(形态,更换,X)

例如:如果我想更换 “abc01” 和 “abc02” 与 “OK”:

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) 。

+1

欢迎来到Stack Overflow。请查看[link1](http://stackoverflow.com/help/how-to-ask)和[link2](http://stackoverflow.com/questions/5963269/how-to-make-a-重现性很好的例子)并相应地修改你的问题。 – Sotos

+1

现在好吗? –

+1

可以试试'library(gsubfn); gsubfn(“abc0(\\ d)”,〜as.integer(x) - 1,text)' –

回答

0

这是一个想法(不像在评论中那样流畅)。这里做的事情,它基本上取代了df1$text硬道理与匹配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.的df2$value我从here

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

由于霍塔借用sub('^.* ([[:alnum:]]+)$', '\\1', i)的解决方案。