我有两个数据框,想通过 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]
但是,如果数据框具有不同的维度,这将不起作用。
在 2 个步骤中使用merge
and ifelse
:
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