Как правило, match
получает индекс. В нашем случае подход состоит в том, чтобы paste
собрать строки и получить индекс с match
match(do.call(paste, df2), do.call(paste, df1)
Если есть только подмножество столбцов с одинаковыми именами столбцов, получить вектор имен столбцов с intersect
, подмножество наборов данных, выполнить paste
и получить индекс с match
nm1 <- intersect(names(df1), names(df2))
match(do.call(paste, df2[nm1]), do.call(paste, df1[nm1]))
Другой вариант - join
, где мы создаем индекс строки в обоих наборах данных, выполняем объединение и извлекаем индекс строки
library(dplyr)
df2 %>%
mutate(rn = row_number()) %>%
left_join(df2 %>%
mutate(rn = row_number()), by = c('col1', 'col2', 'col3')) %>%
pull(rn.y)