在另一个数据帧中使用非NA填写NA

时间:2016-01-26 21:12:01

标签: r merge na

我有三组数据,其中包含两个变量“ID”和“Name”。有没有办法从另一个数据集中填充每个数据集中的缺失,或者创建一个ID和名称组合的主数据集?

setA=data.frame(rbind(
                      c("1","Product A"),
                      c("2",NA),
                      c("3",NA),
                      c("4",NA),
                      c("5","Product E")))
names(setA)=c("ID","Name")

setB=data.frame(rbind(
                      c("1","Product A"),
                      c("2",NA),
                      c("3","Product C"),
                      c("4",NA),
                      c("6","Product F")))
names(setB)=c("ID","Name")

setC=data.frame(rbind(
                      c("1",NA),
                      c("2","Product B"),
                      c("3","Product C"),
                      c("4","Product D"),
                      c("6","Product F")))
names(setC)=c("ID","Name")

我尝试了这个,但它列出了ID“3”两次。我希望NA填写“产品C”。

merge(setA,setB,by=c("ID","Name"),all=T)

我可以只使用ID合并并用非NA替换NAs,但是想知道是否有更直接的方法来做它?

谢谢!

1 个答案:

答案 0 :(得分:1)

我不知道下面的解决方案是否具有通用性,但根据您的示例,以下代码可以解决这个问题(假设名称对于每个ID至少存在一次并且它是唯一的):

setM <- rbind(setA,setB,setC)
setM <- unique(na.omit(setM))