• R语言已解决
  • 我有两个表格,它们有一列数据是互补的,我该如何将两个表格合并?

问题描述

我有两个表格其中有一列是一样的,另外一列是互补的(见例子),我该如何把两个表格合并为一个?这里我提供一个简化的例子:

tbl1和tbl2是我的两个数据框,其中Value这一列是互补的数据

tbl1 <- structure(list(ID = 1:7, Value = c(5L, 3L, NA, NA, 22L, NA, 10L
)), class = "data.frame", row.names = c(NA, -7L))
tbl2 <- structure(list(ID = 1:7, Value = c(NA, NA, 1L, 4L, NA, 5L, NA
)), class = "data.frame", row.names = c(NA, -7L))

tbl1:

|  ID | Value |
|----:|------:|
|   1 |     5 |
|   2 |     3 |
|   3 |    NA |
|   4 |    NA |
|   5 |    22 |
|   6 |    NA |
|   7 |    10 |

tbl2:

|  ID | Value |
|----:|------:|
|   1 |    NA |
|   2 |    NA |
|   3 |     1 |
|   4 |     4 |
|   5 |    NA |
|   6 |     5 |
|   7 |    NA |

我想把这两个表格合并成tbl3这样的表格

tbl3 <- structure(list(ID = 1:7, Value = c(5L, 3L, 1L, 4L, 22L, 5L, 10L
)), class = "data.frame", row.names = c(NA, -7L))

tbl3:

|  ID | Value |
|----:|------:|
|   1 |     5 |
|   2 |     3 |
|   3 |     1 |
|   4 |     4 |
|   5 |    22 |
|   6 |     5 |
|   7 |    10 |

我该使用什么函数?

抱歉我使用的markdown的表格语法没有被识别,但是大概能看出表格的形状

简单解法:

index <- !is.na(tbl1$Value)
tbl3 <- tbl2
tbl3$Value[index] <- tbl1$Value[index]

正式解法 (coalescing join):

tbl3 <- powerjoin::power_left_join(tbl1, tbl2, by = "ID", conflict = powerjoin::coalesce_xy)