我试图更多地了解滚动连接的工作方式,但有些困惑,我希望有人能为我澄清这一点。举一个具体的例子:
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
?再玩一会儿我就无法理解该列中放入了什么值。