基本上我正在尝试使用
data.table join来重现 pandas
[merge_asof][1]
的行为。
left <- data.table(a = c(1, 5, 10), left_val = c("a", "b", "c"))
right <- data.table(aa = c(1, 2, 3, 6, 7), right_val = c(1, 2, 3, 6, 7))
我的预期结果是这样的,类似于左连接但向后匹配,即第一个匹配,其中
right$aa >= left$a
pd.merge_asof(left, right, on="a")
a left_val right_val
0 1 a 1
1 5 b 3
2 10 c 7
我尝试了这种非等值连接但没有成功。我想保留与 data.table 或 dplyr 相关的语法
left[right, on = .(a >= aa), nomatch = NULL]
a left_val right_val
1: 1 a 1
2: 1 b 1
3: 1 c 1
4: 2 b 2
5: 2 c 2
6: 3 b 3
7: 3 c 3
8: 6 c 6
9: 7 c 7
使用滚动参数
right[left, on= .("aa"="a"), roll=+Inf]
aa right_val left_val
<num> <num> <char>
1: 1 1 a
2: 5 3 b
3: 10 7 c