R data.table join 相当于 pandas merge.asof

问题描述 投票:0回答:1

基本上我正在尝试使用

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
r data.table
1个回答
0
投票

使用滚动参数

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
© www.soinside.com 2019 - 2024. All rights reserved.