Хотя SQL допускает (почти) произвольные условия в операторе соединения (например, a_month = b_month + 1 OR a_month + 1 = b_month
), я не нашел dplyr, обеспечивающий такую же гибкость.
Единственный найденный мной способ присоединения в dplyr
для всего, кроме a_column = b_column
, необходимо выполнить более общее объединение и выполнить фильтрацию впоследствии. Поэтому я рекомендую вам попробовать что-то вроде следующего:
join <- full_join(a, b, by = c("a_ID" = "b_ID")) %>%
filter(abs(a_DATE_MONTH - b_DATE_MONTH) <= 1)
Этот подход все еще дает те же записи в ваших окончательных результатах.
Он работает хуже / медленнее, если R выполняет полное полное соединение до делать любую фильтрацию. Тем не менее, dplyr разработан для использования отложенной оценки, что означает, что (если вы не сделаете что-то необычное) обе команды должны оцениваться вместе (как это было бы при более сложном SQL объединении).