Я пытаюсь понять rolling joins
в data.table
. Данные для воспроизведения этого приведены в конце.
Учитывая таблицу данных транзакций в аэропорту, в данный момент:
> dt
t_id airport thisTime
1: 1 a 5.1
2: 3 a 5.1
3: 2 a 6.2
(примечание t_ids
1 и 3 имеют одинаковый аэропорт и время)
и справочную таблицу рейсов, вылетающих из аэропортов:
> dt_lookup
f_id airport thisTime
1: 1 a 6
2: 2 a 6
3: 1 b 7
4: 1 c 8
5: 2 d 7
6: 1 d 9
7: 2 e 8
> tables()
NAME NROW NCOL MB COLS KEY
[1,] dt 3 3 1 t_id,airport,thisTime airport,thisTime
[2,] dt_lookup 7 3 1 f_id,airport,thisTime airport,thisTime
Я хотел бы сопоставить все транзакции со всеми следующими возможными рейсами, вылетающими из этого аэропорта, чтобы дать:
t_id airport thisTime f_id
1 a 6 1
1 a 6 2
3 a 6 1
3 a 6 2
Итак, я думал, что это сработает:
> dt[dt_lookup, nomatch=0,roll=Inf]
t_id airport thisTime f_id
1: 3 a 6 1
2: 3 a 6 2
Но он не возвратил транзакции t_id == 1
.
Из документации в нем говорится:
Как правило, не должно быть дубликатов в ключе xs,...
Однако у меня есть дубликаты в моем "х-ключе" (а именно airport
и thisTime
), и я не могу понять/понять, что означает, что t_id = 1
удаляется из вывода.
Может кто-нибудь пролить свет на то, почему t_id = 1
не возвращается, и как я могу заставить соединение работать, когда у меня есть дубликаты?
Данные
library(data.table)
dt <- data.table(t_id = seq(1:3),
airport = c("a","a","a"),
thisTime = c(5.1,6.2, 5.1), key=c( "airport","thisTime"))
dt_lookup <- data.table(f_id = c(rep(1,4),rep(2,3)),
airport = c("a","b","c","d",
"a","d","e"),
thisTime = c(6,7,8,9,
6,7,8), key=c("airport","thisTime"))