2013-05-06 16 views
5

I haben die folgenden beiden Datenrahmen:ersetzen Wert in Datenrahmen basierend auf einem anderen Datenrahmen

>df1<-data.frame(A=c(0,0,0),B=c(0,201,0),C=c(0,467,0)) 
    A B C 
1 0 0 1 
2 0 201 467 
3 0 0 0 

>df2<-data.frame(A=c(201,467),B=c('abc','def')) 
    A B 
1 201 abc 
2 467 def 

Ich möchte die Werte in DF1 ersetzen mit „B“ -Werte in DF2 übereinstimmt, ein Datenrahmen zu schaffen, das so aussieht dies:

A B C 
1 NA NA NA 
2 NA abc def 
3 NA NA NA 

ich kann diese Spalte-Basis auf einer Säule erreichen mit dem folgenden Code:

>df2$B[match(df1$B,df2$A)] 

Leider arbeite ich mit einem großen Datensatz und würde daher alle Spalten auf einmal abgleichen. Jede Hilfe würde sehr geschätzt werden.

Antwort

2

Eine andere mögliche Lösung:

df1<-data.frame(A=c(0,0,0),B=c(0,201,0),C=c(0,467,0)) 
df2<-data.frame(A=c(201,467),B=c('abc','def')) 

library(qdap) 
apply(df1, 2, lookup, df2) 

## > apply(df1, 2, lookup, df2) 
##  A B  C  
## [1,] NA NA NA 
## [2,] NA "abc" "def" 
## [3,] NA NA NA 
3

können Sie tun:

df1[] <- setNames(df2$B, df2$A)[as.character(unlist(df1))] 
Verwandte Themen