在R中合并数据集时,根据可用数据填写缺失值

时间:2014-06-02 05:36:07

标签: r merge dataset

这是我的问题。我想合并df1和df2数据集。

>df1 
ID   Sub  Time Number  Base  Note
01   A01  100  20      20     Y
01   A01  110  35      20     NA
02   A02  100  15      15     Y
02   A02  150  35      15     NA
03   A04  120  10      10     Y
03   A04  130  25      10     NA
04   A05  90   19      19     Y
04   A05  130  50      19     NA
....

>df2
Sub  Time  Number
A01  150   55
A04  200   60
A05  200   80
A02  200   55
....

合并后的数据集应如下所示:

>merged
ID   Sub  Time Number  Base  Note
01   A01  100  20      20    Y
01   A01  110  35      20    NA
01   A01  150  55      20    NA
02   A02  100  15      15    Y
02   A02  150  35      15    NA
02   A02  200  55      15    NA
03   A04  120  10      10    Y
03   A04  130  25      10    NA
03   A04  200  60      10    NA
04   A05  90   19      19    Y
04   A05  130  50      19    NA
04   A05  200  80      19    NA

如果有人在R中有任何解决方案,请告诉我。谢谢!

2 个答案:

答案 0 :(得分:2)

在向rbind添加适当的列后,您可以df2将两者放在一起。然后,在排序后,来自包na.locf的{​​{1}}将进行最后一次观察。

我在此处通过向zoo添加新级别来欺骗该列,以便代表该列中的原始df1$Note值,因此NA会将其转发。

结果中的na.locf可以替换这些值,并且会减少额外的因子级别。

NA

答案 1 :(得分:2)

您可以使用库(plyr)中的命令rbind.fill:

require(plyr)
require(zoo)
merged = rbind.fill(df1, df2)
merged = merged[order(merged$Sub),]
merged$ID = na.locf(merged$ID)