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

如何从DF1中筛选小于等于DF2日期的最近最大日期对应数据

问题场景

我现在有两个DataFrame:

  • DF1是月度数据快照,存储每个月生效的账户数据
  • DF2存储指定的查询日期
    需要从DF1中筛选出满足「DF1的日期 ≤ DF2的日期」条件的最大日期对应的所有数据。

示例数据

DF1

AccountDate
A10000011-JAN-2021
A10000021-FEB-2021
A10000031-MAR-2021
A10000041-APR-2021

DF2

Date
15-MAR-2021

预期输出

AccountDate
A10000031-MAR-2021

实现方案

注意要先把两个表的日期列转成标准日期格式,不能直接用字符串比较。

方法1:dplyr实现(适合tidyverse技术栈用户)

library(dplyr)
library(lubridate)

# 转换日期格式
DF1 <- DF1 %>% mutate(Date = dmy(Date))
DF2 <- DF2 %>% mutate(Date = dmy(Date))

result <- DF1 %>%
  # 筛选出所有日期小于等于DF2查询日期的记录
  filter(Date <= DF2$Date) %>%
  # 取最大日期对应的全部记录
  filter(Date == max(Date))

方法2:data.table滚动连接实现(效率更高,适合大数据量场景)

library(data.table)
library(lubridate)

# 转换为data.table格式并处理日期
setDT(DF1)[, Date := dmy(Date)]
setDT(DF2)[, Date := dmy(Date)]

# 滚动连接直接匹配最近的不大于查询日期的记录
result <- DF1[DF2, on = "Date", roll = TRUE]

如果DF2包含多条查询日期,上述两种方法都可以直接适配,不需要额外修改逻辑。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 20:24:03