按ID水平合并两个数据帧,仅与第二个数据帧保持匹配

时间:2019-04-08 16:51:14

标签: r join semi-join

我有两个要水平合并的数据框:

dat_a

  a b c
1 1 1 A
2 2 1 A
3 3 1 B
4 4 1 B


dat_b

  a b c
1 3 1 C
2 3 1 C
3 3 1 D
4 4 1 D

我只想保留dat_a中与dat_ba列匹配的b中的那些行。

所以最终结果应如下所示:

dat_c
   a b c
1 3 1 B
2 4 1 B
3 3 1 C
4 3 1 C
5 3 1 D
6 4 1 D

1 个答案:

答案 0 :(得分:2)

尝试使用semi_join软件包中的dplyr

如果只希望dat_a中具有匹配项的行dat_b,可以使用:

library(dplyr)
dat_a %>% semi_join(dat_b, by = c("a", "b"))

如果-像您期望的输出一样-您希望dat_a中所有匹配的dat_b列和dat_b中所有匹配的dat_a列尝试:

dat_a %>% semi_join(dat_b, by = c("a", "b")) 
  %>% bind_rows(dat_b %>% semi_joim(dat_a, by = c("a", "b")))