如何在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
相关产品推荐
相关产品推荐

