滚动连接两个不重叠的`data.table`s

时间:2014-10-08 18:48:09

标签: r data.table

让我们有两个不重叠的data.tables并进行滚动连接:

library(data.table)
P = data.table(id=c("a","a"), t=c(1,4), txn=c(0, 0),key=c("id", "t"))
TX = data.table(id=c("a"), t=c(3), txn=c(1111),key=c("id", "t")) # note the index t = 3 falling in the gap of P
P[TX, txn:=i.txn, roll=TRUE]
P
#    id t  txn
# 1:  a 1 1111
# 2:  a 4    0

为什么txn已归结为之前的可用索引(t=1),当使用roll>0时,我希望将其转到下一个可用一个(t=4)?

P # expected
#    id t  txn
# 1:  a 1    0
# 2:  a 4 1111

1 个答案:

答案 0 :(得分:3)

来自?data.tableroll参数下):

  

如果roll=TRUEi的行与除最后一个x加入列之外的所有行匹配,并且其在上一个i加入列中的值属于差距(包括在x中对该组的最后一次观察之后),然后x中的主导值向前滚动。

这里,来自TX(= i)的值t = 3落在P的t = 1和t = 4之间的间隙中。因此匹配与P(= x)中的主导值是t = 1,相应的行是第一行。您可以通过以下方式找到它:

P[TX, which=TRUE, roll=Inf] ## same as roll=TRUE, LOCF
# [1] 1

相反,如果我们这样做:

P[TX, which=TRUE, roll=-Inf] ## NOCB
# [1] 2

这会回答你的问题吗?