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

R sqldf实现不同日期数据集匹配:按最近日期填充B表权重值

R sqldf按最近日期匹配关联数据集实现

前置预处理

首先将两个数据集的日期字段从字符型转为Date类型,方便后续计算日期差:

library(sqldf)
# 转换日期格式
A$DATE <- as.Date(A$DATE)
B$DATE <- as.Date(B$DATE)

核心关联代码

借助SQLite的日期函数和窗口函数实现按最近日期匹配:

A_B <- sqldf("
WITH date_diff_calc AS (
    SELECT 
        a.ord, a.id, a.Score, a.DATE, a.VISIT, b.Weight,
        -- 计算A表日期与B表日期的差值绝对值
        ABS(JULIANDAY(a.DATE) - JULIANDAY(b.DATE)) AS gap,
        -- 按A表每条记录分组,按日期差值升序排序,差值最小的排名为1
        ROW_NUMBER() OVER (
            PARTITION BY a.ord 
            ORDER BY ABS(JULIANDAY(a.DATE) - JULIANDAY(b.DATE)) ASC
        ) AS rank_num
    FROM A a
    -- 按id关联两表
    LEFT JOIN B b ON a.id = b.id
)
-- 筛选每个A表记录对应的最近B表权重
SELECT ord, id, Score, DATE, VISIT, Weight
FROM date_diff_calc
WHERE rank_num = 1
ORDER BY ord
")

代码说明

  • sqldf默认使用SQLite引擎,JULIANDAY()函数可以将日期转为儒略日数值,方便计算间隔天数
  • 若存在两个B表日期与A表日期的差值完全相同的场景,可以修改ORDER BY规则调整优先级:例如追加, b.DATE DESC会优先取时间更晚的B表记录,追加, b.DATE ASC则优先取更早的记录
  • 执行后得到的A_B与预期输出结构一致,可直接使用

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.17 20:24:07