2013-05-06 26 views
5

Mam następujące dwa dataframes:zastąpić wartość dataframe opartą na innej ramce danych

>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 

chciałbym zastąpić wartości w DF1 za pomocą dopasowania „B” wartości w DF2, tworząc dataframe który wygląda jak to:

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

mogę tego dokonać na podstawie kolumny kolumny stosując następujący kod:

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

Niestety, pracuję z ogromnym zbiorem danych i dlatego wolałbym dopasować wszystkie kolumny naraz. Każda pomoc byłaby bardzo cenna.

Odpowiedz

2

Innym możliwym rozwiązaniem:

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

można zrobić:

df1[] <- setNames(df2$B, df2$A)[as.character(unlist(df1))] 
Powiązane problemy