我试图更多地了解滚动连接的工作方式并且有一些混乱,我希望有人可以为我澄清这一点 . 举一个具体的例子:
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]
对应于 select * from dt1 right join dt2 on (dt1.id = dt2.id and dt1.t = dt2.t)
的sql,除了添加了功能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
的情况怎么样?玩了一下我无法理解列中放置了什么值 .
1 回答
文档中的引用似乎来自FAQ 1.12 X [Y]和合并(X,Y)之间的区别是什么 . 您是否在
?data.table
中找到以下内容并且有帮助吗?就SQL连接的左/右类比而言,我更倾向于在FAQ 2.14的上下文中考虑这个问题 . 您能否进一步解释为什么data.table受到基础中A [B]语法的启发 . 那's quite a long answer so I won'贴在这里 .