Используйте таблицы данных:
library(data.table)
Создайте свои данные в виде data.table:
df1 <- data.table( x = c(1,1,1,1,1), y = c(1,2,3,4,5), value = c(3,4,5,6,7) )
df2 <- data.table( x = c(1,1,1,1,1,2), y = c(5,3,4,2,1,6), value = c(8,9,10,11,12,13) )
Или преобразуйте существующие фреймы данных:
df1 <- as.data.table( df1 )
df2 <- as.data.table( df2 )
Тогда:
df2[ df1, on = .(x,y) ]
Любой столбец в df1 с таким же именем в df2 будет переименован в i.columnname:
x y value i.value
1: 1 1 12 3
2: 1 2 11 4
3: 1 3 9 5
4: 1 4 10 6
5: 1 5 8 7
Обратите внимание, что он уже упорядочен по x и y.Если вы хотите упорядочить по столбцу «значение» (или любому другому):
df2[ df1, on = .(x,y) ][ order(value) ]
Преимущество использования data.table (или dplyr, как решения, предложенного AntoniosK), заключается в том, что вы можете сохранитьдва набора данных разделены.