скользящие соединения data.table в R

Я пытаюсь понять немного больше о том, как работают скользящие соединения, и у меня есть некоторая путаница, я надеялся, что кто-нибудь может прояснить это для меня. Возьмем конкретный пример:

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? Поигравшись еще немного, я не могу понять, какое значение помещается в столбец.

43
задан kdauria 15 November 2013 в 22:11
поделиться