如何用data.table按晚于目标时间的最近时间点合并两个数据集
解决方法
你需要修改滚动连接的roll参数即可实现需求:你之前使用的roll="nearest"会匹配时间距离最近的记录,不管该记录早于还是晚于y表的时间,因此会出现不符合要求的结果。
要实现仅匹配x表中晚于等于y表时间的最近记录,将roll参数设置为-Inf即可,完整代码如下:
require(data.table) setDT(x) setDT(y) x[, reference.x := date.time] # 用于校验连接结果的参考字段 # 滚动连接,仅匹配x表date.time >= y表date.time的最近记录 results <- x[y, on = "date.time", roll = -Inf] # 若需要剔除y表中无对应x匹配的记录,可添加nomatch=0参数 # results <- x[y, on = "date.time", roll = -Inf, nomatch = 0]
参数说明
roll = -Inf:限定连接时仅查找y表时间对应的x表中大于等于该时间的最近记录,不会匹配时间更早的记录,完全符合你的业务规则。- 上述代码使用了
on参数显式指定连接键,不需要提前设置表的key,逻辑更清晰,也不会修改原表的排序属性。
内容的提问来源于stack exchange,提问作者kpm
相关产品推荐
相关产品推荐

