如何使用 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
当"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