Есть ли пятно способ присоединиться к таблицам данных в 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?
Если этот простой пример не ясен, я кратко объясню большую проблему, которую я испытываю. У меня есть таблица данных со столбцами: category, time, output1, output2... Есть сотни категорий со связанным временем. Возможно, мне захочется вывести результат 1 для всех категорий в определенное время. Поскольку времена были отбракованы без видимой логики, иногда время округляется до ближайшей четной секунды; в других случаях время округляется до ближайшей минуты или даже 10 минут.
Я мог бы написать script, чтобы переписать время в более общем формате, но мне любопытно, есть ли пятно data.table решение, которое я не видел. Я исследовал слияние без успеха.