如何用data.table实现多条件高效连接(免生成大中间表)
解决方案
data.table 从1.9.8版本开始支持非等条件连接,可以直接在on参数中同时指定相等匹配的id字段和范围条件,无需先全连接再过滤,完全避免庞大中间表的生成。
一行式实现代码(以保留匹配行的内连接为例):
dtBig[dtSmall, on = .(id, d1 >= d_start, d2 <= d_end), nomatch = 0L]
参数说明:
on = .(id, d1 >= d_start, d2 <= d_end):明确连接规则——id字段完全匹配,同时满足dtBig$d1 >= dtSmall$d_start且dtBig$d2 <= dtSmall$d_endnomatch = 0L:仅保留两边都匹配的行(内连接);若需保留dtBig所有行(左连接),可删除该参数
这种写法会在连接过程中直接过滤不符合条件的行,底层采用高效的匹配算法,性能远优于先全连接再过滤的方式,完全适配大数据量场景。
内容的提问来源于stack exchange,提问作者Lolivano
相关产品推荐
相关产品推荐

