我有一个主表(a),包含列:id、age 和sex。例如。
a <- data.frame(id=letters[1:4], age=c(18,NA,9,NA), sex=c("M","F","F","M"))
id age sex
1 a 18 M
2 b NA F
3 c 9 F
4 d NA M
Run Code Online (Sandbox Code Playgroud)
我有一个补充表(b),只包含表(a)中的所有缺失数据或表(a)中的重复数据。例如。
b <- data.frame(id=c("a","b","d"), age=c(18,32,20))
id age
1 a 18
2 b 32
3 d 20
Run Code Online (Sandbox Code Playgroud)
现在我想合并这两个表,如下所示:
id age sex
1 a 18 M
2 b 32 F
3 c 9 F
4 d 20 M
Run Code Online (Sandbox Code Playgroud)
不过,我试过了merge(a,b,by="id",all=T)。结果不是我想要的。有没有办法解决这个问题?谢谢!
我们可以用data.table
library(data.table)
setDT(a)[b, agei := i.age, on='id'][is.na(age), age := agei][,agei:= NULL][]
a
# id age sex
#1: a 18 M
#2: b 32 F
#3: c 9 F
#4: d 20 M
Run Code Online (Sandbox Code Playgroud)