【发布时间】:2012-08-15 09:16:01
【问题描述】:
我正在尝试更多地了解滚动连接的工作方式并且有些困惑,我希望有人可以为我澄清这一点。举个具体的例子:
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 但那个特定的id 在dt1 中不存在怎么办?玩得更久了,我无法理解该列中的值是什么。
【问题讨论】:
-
我写了一篇博文,描述滚动连接的工作原理gormanalysis.com/r-data-table-rolling-joins
标签: r join time-series data.table