我想更好地了解滚动连接的工作方式,但有些困惑,希望有人能为我澄清。以下是一个具体的示例:
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
但是在 dt1
中不存在特定的 id
的情况下怎么办?再试验一下,我无法理解将什么值放入该列中。