2013-05-06 116 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))] 
相关问题