2013-05-06 229 views
5

我有以下兩個dataframes:替換基於另一個數據幀中數據幀值

>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 

我想更換使用匹配在DF2「B」值DF1的值,產生一個數據幀,看起來像此:

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

我可以在逐列的基礎使用以下代碼實現這一點:

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

不幸的是,我正在處理大量數據集,因此寧願一次匹配所有列。任何幫助將非常感激。

回答

2

另一種可能的解決方案:

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

你可以這樣做:

df1[] <- setNames(df2$B, df2$A)[as.character(unlist(df1))] 
相關問題