使用data.table按分组实现日期间合并,重叠任期时保留重复行
data.table 范围合并解决方案
你需要的是非等值范围连接,data.table原生支持该操作,代码简洁且执行效率很高,具体实现如下:
实现代码
library(data.table) # 1. 执行非等值连接匹配经理 res = DT[manager_DT, # 连接条件:门店相同,且观测日期落在经理任期范围内 on = .(Store, Date >= min_date, Date <= max_date), # 指定返回列,x.Date代表取DT表的原始日期字段 .(Store, Date = x.Date, Manager), # 允许生成笛卡尔积(重叠任期会自动扩行) allow.cartesian = TRUE] # 2. 按门店、日期排序,和你给出的期望输出格式对齐 setorder(res, Store, Date, Manager)
结果说明
运行后得到的res就是你需要的「日期×门店×经理」维度的唯一观测:
- 任期无重叠的日期每个门店仅保留1行对应经理
- 任期重叠的日期会自动复制为多行,每行对应一名在职经理
- 直接返回单个Manager字段,不需要额外拼接处理
注意事项
你示例给出的manager_DT存在年份笔误,把对应经理的任期起止日期调整为2002年的对应日期,即可和你给出的期望输出完全匹配。
内容的提问来源于stack exchange,提问作者plausibly_exogenous
相关产品推荐
相关产品推荐

