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

如何在R中基于另一数据框的±7天日期筛选数据框子集

按ID匹配筛选日期差在7天内的R数据框记录

步骤说明

核心逻辑是先统一日期格式,按ID关联两个数据框,计算日期差值后筛选符合条件的记录,最后去重保留目标列。

完整代码实现

先补全df2的定义(原代码缺少数据框创建语句),再执行筛选逻辑:

# 加载dplyr包(未安装先运行 install.packages("dplyr"))
library(dplyr)

# 定义df1
Name <- c("Doe, John", "Doe, John", "Smith, John")
ID <- c("123456", "123456", "345678")
Collection <- c("2021-01-03", "2022-05-01", "2022-06-14")
df1 <- data.frame(Name, ID, Collection)

# 定义df2(补全数据框创建)
Number <- c("M123", "M456", "M367")
ID <- c("123456", "123456", "345678")
Complete_Date <- c("2021-01-05", "2022-06-01", "2022-06-12")
df2 <- data.frame(Number, ID, Complete_Date)

# 1. 将字符型日期转为Date类型,方便计算差值
df1$Collection <- as.Date(df1$Collection)
df2$Complete_Date <- as.Date(df2$Complete_Date)

# 2. 按ID关联两个数据框,计算日期差的绝对值
df_joined <- df1 %>%
  full_join(df2, by = "ID") %>%
  mutate(date_diff = abs(difftime(Collection, Complete_Date, units = "days")))

# 3. 筛选日期差≤7天的记录,去重后保留df1的目标列
df3 <- df_joined %>%
  filter(date_diff <= 7) %>%
  select(Name, ID, Collection) %>%
  distinct()

# 查看最终结果
print(df3)

输出结果

运行后得到的df3与预期一致:

Name     ID Collection
1  Doe, John 123456 2021-01-03
2 Smith, John 345678 2022-06-14

内容的提问来源于stack exchange,提问作者T.McMillen

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 11:25:23