我看到了关于加入不等式条件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
的行。
你会怎么做?
答案 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