让我们有两个不重叠的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
答案 0 :(得分:3)
来自?data.table
(roll
参数下):
如果
roll=TRUE
和i
的行与除最后一个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
这会回答你的问题吗?