【发布时间】:2019-03-24 08:55:13
【问题描述】:
如何合并R 中的两个数据表(或数据框),并保留每个匹配列中的非NA 值?如果明确指定每个单独的列(至少据我所知),问题Merge data frames and overwrite values 提供了一个解决方案。但是,我在两个数据表之间有 40 多个公共列,并且两者中的哪一个具有 NA 与有效值有点随机。因此,为 40 列编写 ifelse 语句似乎效率低下。
下面是一个简单的例子,我想通过id 和date 列加入(merge)两个data.tables:
dt_1 <- data.table::data.table(id = "abc",
date = "2018-01-01",
a = 3,
b = NA_real_,
c = 4,
d = 6,
e = NA_real_)
setkey(dt_1, id, date)
> dt_1
id date a b c d e
1: abc 2018-01-01 3 NA 4 6 NA
dt_2 <- data.table::data.table(id = "abc",
date = "2018-01-01",
a = 3,
b = 5,
c = NA_real_,
d = 6,
e = NA_real_)
setkey(dt_2, id, date)
> dt_2
id date a b c d e
1: abc 2018-01-01 3 5 NA 6 NA
这是我想要的输出:
> dt_out
id date a b c d e
1: abc 2018-01-01 3 5 4 6 NA
我也尝试了left_join two data frames and overwrite 的dplyr::anti_join 解决方案,但没有成功。
【问题讨论】:
-
如果同一变量的非 NA 值具有相同的
id会发生什么?你愿意把那个从你的“左边”桌子上拿下来吗? -
@Hamed 好问题。我正在考虑这个问题,但不想让事情变得过于复杂。是的,假设我们保留了左表的值。谢谢!
标签: r dplyr data.table