You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于data.table non-equi join实现数值区间匹配次数统计

解决方法

首先加载data.table包,将两个数据框转换为data.table对象,通过左连接+按原始mock行分组计数的方式直接得到结果:

library(data.table)
# 转换为data.table格式
setDT(mock)
setDT(range)

# 非等值连接+分组计数直接得到结果
result <- range[mock, 
                on = .(x <= num, y >= num), 
                .(check = .N), 
                by = .(id, num)]

代码说明

  1. 连接方向调整:你之前写的mock[range, ...]是以range为左表,统计的是每个区间匹配的mock记录数,我们的需求是统计每个mock记录匹配的区间数,所以要把range放在左边,mock放在右边做左连接。
  2. on = .(x <= num, y >= num)的含义是:对每一个mock表的num值,匹配range表中所有满足x <= num且y >= num的区间行。
  3. by = .(id, num)表示按mock表的原始行(id和num唯一标识一行)分组,.N统计每个分组匹配到的range行数,也就是你要的check值。

运行上述代码得到的result和你期望的输出完全一致,data.table的非等值连接是底层C实现的,即使是百万级以上的数据集运行效率也远高于嵌套循环方案。


内容的提问来源于stack exchange,提问作者Robin B

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 07:36:00