如何使用 dplyr 连接两个数据帧以聚合同一列的值?

How to join two dataframes using dplyr in order to agregate values of the same column?

当"a"table包含相同的列时,是否有一种简单而优雅的方法来左连接(使用dplyr)"b"table,但是第一个有 NA,第二个 table 有缺失值?下面是一个例子:

# Tables A and B
a <- tibble(
  "ID" = c(1,2,3),
  "x" = c(NA,5, NA)
)

b <- tibble(
  "ID" = c(1,3),
  "x" = c(7, 4)
)

# Table I want as result
c <- tibble(
  "ID" = c(1,2,3),
  "x" = c(7,5,4)
)

加入然后删除带有 NA 的行应该可以做到。如果 ID 在两个表中都有 x 的非 NA 值,那么此代码将有 2 行对应 ID,但这可能是您想要的行为想要

library(dplyr)
full_join(a,b, by = c('ID', 'x')) %>%
    na.omit()

# A tibble: 3 x 2
     ID     x
  <dbl> <dbl>
1     2     5
2     1     7
3     3     4

您可以使用 dplyr 包中的 coalesce 函数从缺失的片段中匹配一个完整的向量。这是受 sql COALESCE 函数的启发。

left_join(a,b, by='ID') %>%
  mutate(col = coalesce(x.x, x.y)) %>%
  select(ID, col)

# A tibble: 3 x 2
     ID   col
  <dbl> <dbl>
1     1     7
2     2     5
3     3     4