R - Merge/Join 并且只有在丢失时才替换(优先级?)

R - Merge/Join and only replace if missing (Priority?)

是否可以只合并缺失值的数据?

例如,假设我有两个数据集。 D1 是我的优先数据集,但我想使用 D2 中的信息来填充 D1 中的任何缺失数据。如果D1和D2有冲突的值,那么我想保留D1中的值并丢弃D2。

D1 <- data.frame(
  id=seq(1,3),
  x=c("cow",NA,"sheep"))

D2 <- data.frame(
  id=seq(1,3),
  x=c("cow","turtle","parrot"))

理想情况下,最终数据集如下所示:

D3 <- data.frame(
  id=seq(1,3),
  x=c("cow","turtle","sheep"))

turtle 会替换 NA,但 parrot 不会替换 sheep.

如果行是唯一标识的,您可以使用 dplyr::rows_patch().

library(dplyr)
  
D1 %>%
  rows_patch(D2, by = "id")

  id      x
1  1    cow
2  2 turtle
3  3  sheep

在基础 R 中,您可以使用 match -

inds <- is.na(D1$x)
D1$x[inds] <- D2$x[match(D1$id[inds], D2$id)]
D1

#  id      x
#1  1    cow
#2  2 turtle
#3  3  sheep