Я пытаюсь понять немного больше о том, как работает сводная работа, и я испытываю некоторую путаницу, я надеялся, что кто-нибудь сможет это разъяснить. Чтобы взять конкретный пример:
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 rows using Y (or Y key if it has one)
as an index.
Это означает, что нужно возвращать только вещи в X, а соединение - внутреннее соединение, а не внешнее. Как насчет в случае, когда roll=T
, но тот конкретный id
не существует в dt1
? Играя немного больше, я не могу понять, какое значение помещается в столбце.