2013-09-25 36 views
0

我有兩個數據幀,並希望通過id合併它們,以便將目標數據幀「df1」中的NA值替換爲「df2」的值。直到現在我用合併入口爲NA的數據幀

df1<-data.frame(id=1:3,a=c(NA,"A","B")) 
df2<-data.frame(id=1:3,a=LETTER[1:3]) 
idx<-is.na(df1) 
df1[idx]<-df2[idx] 

但是,如果數據幀具有不同的尺寸,這將無法正常工作。

回答

2

在使用mergeifelse 2個步驟:

df1<-data.frame(id=1:3,a=c(NA,"A","B"),stringsAsFactors=FALSE) 
df2<-data.frame(id=1:3,a=LETTERS[1:3],stringsAsFactors=FALSE) 
mm <- merge(df1,df2,by=1,all.y=TRUE,al.x=FALSE) 
mm$a.x <- ifelse(is.na(mm$a.x),mm$a.y,mm$a.x) 
mm 
    id a.x a.y 
1 1 A A 
2 2 A B 
3 3 B C 

礦石一個襯裏溶液使用data.table

library(data.table) 
DT1 <- data.table(df1,key='id') 
DT2 <- data.table(df2,key='id') 
DT1[DT2][,list(id,ifelse(is.na(a),a.1,a))] 
    id V2 
1: 1 A 
2: 2 A 
3: 3 B