我正在尝试合并来自多个数据帧的信息。假设我有一个称为“ master”的主数据框,其中包含有关一堆汽车的信息。主数据帧可能具有所有ID。然后,假设我还有另外两个数据帧,每个数据帧都有一些ID和汽车的颜色,但不是全部。我想将所有与汽车ID相对应的汽车颜色放入现有的主数据框中。
Master df看起来像这样:
id year
4D 2005
5A 2003
7T 1999
8Q 2001
3G 1998
6N 2009
2B 2013
df1看起来像这样:
id color
5A black
7T green
8Q gold
4D white
df2看起来像这样:
id color
5A NA
6N purple
3G NA
2B orange
这是制作4个数据帧的代码:
master <- data.frame(id = c("4D", "5A", "7T", "8Q", "3G", "6N", "2B"), year=c(2005,2003,1999,2001,1998,2009,2013))
df1 <- data.frame(id=c("5A", "7T", "8Q", "4D"), color=c("black", "green", "gold", "white"))
df2 <- data.frame(id=c("5A", "6N", "3G", "2B"), color=c(NA,"purple", NA, "orange"))
我希望最终的主数据框架如下所示:
id year color
4D 2005 white
5A 2003 black
7T 1999 green
8Q 2001 gold
3G 1998 NA
6N 2009 purple
2B 2013 orange
如果在一个数据帧中有相同ID的值,而在另一个数据帧中有相同ID的NA(即:ID 5A在df1中具有“黑色”,而在df2中则具有NA),则该值应存在于电子表格中。
有什么想法吗?我已经看过合并和堆栈功能,但是我不认为这些是解决问题的方法吗?
df <- Master
df1
df2
dft <- rbind(df1, df2)
df3 <- dft[with(dft, order(id, color)), ]
df3 <- df3[!duplicated(df3$color), ]
merge(df, df3, by = 'id', all.x = T)
id year color
1 2B 2013 orange
2 3G 1998 <NA>
3 4D 2005 white
4 5A 2003 black
5 6N 2009 purple
6 7T 1999 green
7 8Q 2001 gold
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句