Есть ли удобный способ объединить таблицы данных в R, где ключевые значения времени близки, но не совсем одинаковы? Например, предположим, что у меня есть таблица данных с результатами за разные периоды времени:
DT1 = data.table(x=rep(c("a","b","c"),each=3), time=c(10,30,60), v=1:9)
Здесь у нас есть некоторые значения (v) для разных категорий (x), взятые в разное время (время). Теперь предположим, что у меня есть данные из другого источника, который предоставляет некоторые значения времени для разных категорий:
DT2=data.table(x=rep(c("a","b","c"),each=1),time=c(10,10,60))
Мне может быть интересно попытаться сопоставить время в DT2 как можно точнее с DT1, чтобы предсказать значение v для моих категорий DT2. Я бы хотел сделать что-то вроде
setkeyv(DT2,c("x","time"))
merge(DT1,DT2,by=c("time","v")
Что возвращает:
time x v
1: 10 a 1
2: 10 b 4
3: 60 c 9
Но что, если бы мои времена не имели такой же точности? Например:
DT2=data.table(x=rep(c("a","b","c"),each=1),time=c(17,54,3))
Есть ли способ выполнить подобное слияние, но выбрать время DT2, близкое к времени DT1? То есть 17 будет близко к 30, 54 - к 60, а 3 - к 10?
Если этот простой пример непонятен, я кратко объясню большую проблему, с которой я столкнулся. У меня есть таблица данных со столбцами: категория, время, вывод1, вывод2 ... Существуют сотни категорий со связанными временами. Я мог бы захотеть вывести результат 1 для всех категорий в определенное время. Поскольку время было выбрано без какой-либо очевидной логики, иногда время округляется до ближайшей четной секунды; в других случаях время округляется до ближайшей минуты или даже до 10 минут.
Я мог бы написать сценарий для перезаписи времени в более распространенном формате, но мне любопытно, есть ли интересное решение data.table, которого я не видел. Я безуспешно исследовал скользящее слияние.