Объединение двух кадров данных по горизонтали по идентификатору и сохранение только совпадений из второго - PullRequest
0 голосов
/ 08 апреля 2019

У меня есть два фрейма данных, которые я хочу объединить по горизонтали:

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

1 Ответ

2 голосов
/ 08 апреля 2019

попробовать 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 try:

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