У меня есть два фрейма данных, которые я хочу объединить по горизонтали:
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
попробуйте 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")))