Есть ли в R функция для выполнения эксклюзивного полного соединения? - PullRequest
0 голосов
/ 04 января 2019

Я объединяю два фрейма данных, у которых есть несколько перекрывающихся наблюдений. Эти наблюдения не перекрывают все столбцы, поэтому они не идентичны, но они одинаковы для столбцов, которые, как я решил, важны для связи. Как объединить / объединить так, чтобы сопоставленные наблюдения были исключены?

Я знаком с различными функциями соединения и с тем, как выполнять внутренние и внешние объединения, используя merge(), но я не вижу опции для исключения строк, которые составляли бы внутреннее соединение.

Это похожий вопрос по теме, Exclusive Full Join in r но предполагается, что в каждом кадре данных есть разные столбцы, которые будут создавать NA при полном объединении. Как бы вы это сделали, если бы кадры данных имели одинаковые столбцы?

Обходной путь, который я использую, заключается в использовании duplicated() от первого и последнего для удаления строк после полного объединения. Есть ли более элегантный способ получить дополнение внутреннего соединения?

df_joined <- merge(df1, df2, all = TRUE)
df_joined <- subset(df_joined, !(duplicated(df_joined[ 
,linking_cols])==TRUE | duplicated(df_joined[ ,linking_cols], fromLast = 
TRUE)==TRUE))

1 Ответ

0 голосов
/ 04 января 2019

вам нужно объединить два анти-соединения

library(dplyr)
bind_rows(
  anti_join(df1, df2),
  anti_join(df2, df1),
)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...