R 数据帧:如何使用 df2 "populate" df1 中缺失的数据



我正在尝试用df2填充df1的缺失值。每当两个df中的同一单元格都有一个有效值时,我需要将该值保持为df1中的值。如果df2中有一列不在df1中,则必须将此新列(z(添加到df1中。

这将是一个简单的例子:

id <- c (1, 2, 3, 4, 5)
x <- c (10, NA, 20, 50, 70)
y <- c (3, 5, NA, 6, 9)
df1 <- data.frame(id, x, y)
id <- c ( 2, 3, 5)
x <- c (10, NA, NA)
z <- c (NA, 6, 7)
df2 <- data.frame(id, x, z)

我想获得";df3":

id  x y  z
1  1 10 3 NA
2  2 10 5 NA
3  3 20 6  6
4  4 50 6 NA
5  5 70 9  7

我试了几个";合并";无效的选项。

经过几个提取和替换步骤后的'merge'选项可能是

idx <- is.na(df1[df2$id,])
df1[df2$id,][idx] <- df2[idx]
out <- merge(df1, df2[, c("id", "z")], by = "id", all.x = TRUE)

结果

out
#  id  x y  z
#1  1 10 3 NA
#2  2 10 5 NA
#3  3 20 6  6
#4  4 50 6 NA
#5  5 70 9  7

相关内容

最新更新