合并条目为NA的数据帧

时间:2013-09-25 12:15:25

标签: r merge dataframe

我有两个数据帧并希望通过id合并它们,因此目标数据帧“df1”中的值NA被“df2”的值替换。直到现在我用

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]

但如果数据框具有不同的尺寸,这将无效。

1 个答案:

答案 0 :(得分:2)

使用mergeifelse分两步:

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