2013-05-06 20 views
5

Ben aşağıdaki iki dataframes:başka bir veri çerçevesi göre dataframe değeri yerine

>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 

I df2 "B" değerlerine uyan kullanılarak df1 değerleri yerine istiyorum benzeyen bir dataframe oluşturma Bu:

A B C 
1 NA NA NA 
2 NA abc def 
3 NA NA NA 
aşağıdaki kodu kullanarak kolon bazında bir kolon üzerinde bunu gerçekleştirmenin

:

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

Maalesef, büyük bir veri kümesiyle çalışıyorum ve bu nedenle tüm sütunları bir kerede eşleştirmeyi tercih ediyorum. Herhangi bir yardım çok takdir edilecektir.

cevap

2

Başka bir olası çözüm:

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

Sen yapabilirsiniz:

df1[] <- setNames(df2$B, df2$A)[as.character(unlist(df1))] 
İlgili konular