Пакет
data.table
имеет собственный метод слияния и опцию roll
, которая разрешает самые близкие совпадения. например,
library(data.table)
dt1 <- data.table(a = c(1,2,3,4), b=1:4)
dt2 <- data.table(a = c(1.6,2.1,3.2,4.9), c=1:4)
setkeyv(dt1, "a")
setkeyv(dt2, "a")
dt1[dt2, roll="nearest"]
См. Соедините R data.tables, где значения ключей не совсем равны - объедините строки с ближайшим временем для другого примера.
Чтобы быть устойчивым, я бы, вероятно, вместо этого сделал бы некоторые манипуляции с датой и временем, чтобы заставить их обоих быть с точностью до часа, а затем сделал бы ближайшее соединение, если все остальное не удалось
edit: этот метод не будет работать на data.frame
объектах, если вы не использовали data.table
до того, как, возможно, останетесь простыми и круглыми часами