2016-08-04 32 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) 

Ich mag ersetzt die Symbole als Text in df1 mit dem entsprechenden Wert in DF2 enthaltene ersetzen, zu erhalten: 'Hello 0', 'Go to 1'.R String-Matching in Datenrahmen mit dem Wert von einem anderen Datenrahmen mit gsub

Typisch für String-Ersatz verwendet I gsub (Muster, Ersatz, x)

Ex: Wenn ich will "ABC01" und "abc02" mit "OK" ersetzen:

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

Meine Idee ist es, eine Funktion zu verwenden, in Abschnitt ersetzen:

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

, in dem ich die Auswechslung tun würde, aber ich weiß nicht, wie ich vorbei kann als Argument KKK, die matching-Strings bestimmt (ABC01, abc02) .

+1

Willkommen bei Stack Overflow. Bitte schauen Sie sich [link1] (http://stackoverflow.com/help/how-to-ask) und [link2] an (http://stackoverflow.com/questions/5963269/how-to-make-a- groß-r-reproduzierbar-Beispiel) und überarbeiten Sie Ihre Frage entsprechend. – Sotos

+1

Es ist jetzt gut? –

+1

Könnte versuchen 'Bibliothek (gsubfn); gsubfn ("abc0 (\\ d)", ~ as.integer (x) - 1, Text) ' –

Antwort

0

Hier ist eine Idee (nicht so glatt wie die in den Kommentaren). Was dies bedeutet, ersetzt es im Grunde das letzte Wort von df1$text mit den df2$value des angepassten 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. Ich lieh mir die sub('^.* ([[:alnum:]]+)$', '\\1', i) von here

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

Dank Jota für die Lösung.