R data.table连接左右表之间的不等式条件

时间:2013-10-30 08:42:30

标签: r data.table

我看到了关于加入不等式条件R data.table join with inequality conditions的问题,我问自己,我们将如何继续加入两个data.tables,这两个数据之间存在不等式条件?

这通常对时间序列非常感兴趣,我们希望将一个表X与另一个Y连接,但是连接应该选择X中第一行匹配的时间范围小于Y中行的时间。

dt <- data.table(rep(c("A", "B", "C"), 4), 5:16)
dt2 <- data.table(rep(c("A", "B", "C"), 4), 1:12)
cbind(dt,dt2)
    V1 V2 V1 V2
 1:  A  5  A  1
 2:  B  6  B  2
 3:  C  7  C  3
 4:  A  8  A  4
 5:  B  9  B  5
 6:  C 10  C  6
 7:  A 11  A  7
 8:  B 12  B  8
 9:  C 13  C  9
10:  A 14  A 10
11:  B 15  B 11
12:  C 16  C 12

现在,从dt获取与变量dt2上的V1行相匹配但dt$V2小于dt2$V2的行。

你会怎么做?

1 个答案:

答案 0 :(得分:6)

您可以在此处使用roll参数。

timeresolution = 0.01
dt[,V2 := V2 - timeresolution]

setkeyv(dt,c("V1","V2"))
setkeyv(dt2,c("V1","V2"))
dt2[dt,roll=-Inf]

> dt2[dt,roll=-Inf]
    V1 V2 V2.1
 1:  A  4    5
 2:  A  7    8
 3:  A 10   11
 4:  A 13   14
 5:  B  5    6
 6:  B  8    9
 7:  B 11   12
 8:  B 14   15
 9:  C  6    7
10:  C  9   10
11:  C 12   13
12:  C 15   16