我有两个要水平合并的数据框:
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
和a
列匹配的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
答案 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")))