0

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

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_b的行ab.

所以最终的结果应该是这样的:

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
4

1 回答 1

2

semi_joindplyr包中尝试。

如果您只想要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")))
于 2019-04-08T16:57:03.203 回答