Я пытаюсь понять немного больше о том, как работают вращающиеся соединения, и у меня есть некоторая путаница, я надеялся, что кто-то сможет прояснить это для меня. Возьмем конкретный пример:
dt1 <- data.table(id=rep(1:5, 10), t=1:50, val1=1:50, key="id,t")
dt2 <- data.table(id=rep(1:5, 2), t=1:10, val2=1:10, key="id,t")
Я ожидал, что это приведет к длинному data.table
, где значения в dt2
свернуты:
dt1[dt2,roll=TRUE]
Вместо этого кажется, что правильный способ сделать это:
dt2[dt1,roll=TRUE]
Может ли кто-нибудь объяснить мне больше о том, как работает присоединение к data.table
, поскольку я явно не понимаю его правильно. Я думал, что dt1[dt2,roll=TRUE]
соответствует sql-эквиваленту select * from dt1 right join dt2 on (dt1.id = dt2.id and dt1.t = dt2.t)
, за исключением добавленной функциональности locf.
Кроме того, в документации говорится:
X[Y] is a join, looking up X's rows using Y (or Y's key if it has one)
as an index.
Это создает впечатление, что должны быть возвращены только вещи в X, а выполняемое соединение - это внутреннее соединение, а не внешнее. А как насчет случая, когда roll=T
, но этот конкретный id
не существует в dt1
? Еще немного поигравшись, я не могу понять, какое значение помещается в столбец.