Вы можете получить df2
в длинном формате, сохраняя invoice_number
и shipment_number
в одном столбце, а затем выполнить объединение.
library(dplyr)
df1 %>%
left_join(df2 %>%
tidyr::pivot_longer(cols = c(invoice_number, shipment_number),
values_to = 'gst_invoice_no'), by = 'gst_invoice_no')
Для больших наборов данных мы можем использовать data.table
:
library(data.table)
setDT(df2)
setDT(df1)
df3 <- df1[melt(df2, measure.vars = c('shipment_number', 'invoice_number'),
value.name = "gst_invoice_no"), on = 'gst_invoice_no']
df3[, .SD[1L], gst_invoice_no]