Процедура одинакова для любого количества клавиш. Вам нужен столбец в каждой таблице, который не имеет NA
s (пропущенные значения). (Изменить: если в одной из таблиц такого столбца нет, вы можете создать фиктивный столбец, например, так: dfa$dummy1 <-1
)
После объединения эти столбцы будут содержать NA
s, если эта строка не нет совпадений в другой таблице. Затем вы можете просто найти эти строки в объединенной таблице и назначить соответствующие флаги:
set.seed(123)
dfa <- data.frame(id=c(1,2,3,5),val1=rnorm(4))
dfa
#> id val1
#> 1 1 -0.56047565
#> 2 2 -0.23017749
#> 3 3 1.55870831
#> 4 5 0.07050839
dfb <- data.frame(id=c(1,2,4,5),val2=rnorm(4))
dfb
#> id val2
#> 1 1 0.1292877
#> 2 2 1.7150650
#> 3 4 0.4609162
#> 4 5 -1.2650612
dfc <- merge(dfa,dfb,all=T)
dfc$flag <- 3 # Assume all rows are matched by default
dfc$flag[is.na(dfc$val1)] <- 1 # Search for NAs in val1 for no-match due to dfA
dfc$flag[is.na(dfc$val2)] <- 2 # Search for NAs in val2 for no-match due to dfB
dfc
#> id val1 val2 flag
#> 1 1 -0.56047565 0.1292877 3
#> 2 2 -0.23017749 1.7150650 3
#> 3 3 1.55870831 NA 2
#> 4 4 NA 0.4609162 1
#> 5 5 0.07050839 -1.2650612 3
Создано в 2020-01-13 с помощью пакета Представление (v0 .3.0)