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

如何判断多组起止日期是否落在指定日期范围内?

筛选日期区间与指定日期列表重叠的记录

现有包含itemNo、start、end字段的datesToSearch数据框,需筛选出起止日期区间与指定日期列表myDates存在重叠的记录——只要区间内任意日期在该列表中,就保留该记录。

示例数据

# 指定日期列表
myDates <- c(20240320, 20240319, 20240318)

# 待筛选的数据框
datesToSearch <- data.frame(
  itemNo = c(241, 242, 243, 244, 300),
  start = c(20240311, 20240316, 20240319, 20240318, 20240318),
  end = c(20240317, 20240317, 20240321, 20240324, 20240324)
)

解决方案

方法1:Base R 实现

核心逻辑是检查每条记录的日期区间是否包含myDates中的任意一个日期,满足则保留该行:

# 确保日期为数值型(避免字符型比较问题)
myDates <- as.numeric(myDates)
datesToSearch$start <- as.numeric(datesToSearch$start)
datesToSearch$end <- as.numeric(datesToSearch$end)

# 筛选符合条件的记录
correctdatesToSearch <- datesToSearch[apply(datesToSearch, 1, function(row) {
  any(myDates >= row["start"] & myDates <= row["end"])
}), ]

# 输出结果
correctdatesToSearch

运行后得到目标结果:

itemNo    start      end
3    243 20240319 20240321
4    244 20240318 20240324
5    300 20240318 20240324

方法2:dplyr 实现

若使用tidyverse工具链,可通过rowwise()逐行判断:

library(dplyr)

correctdatesToSearch <- datesToSearch %>%
  rowwise() %>%
  filter(any(myDates >= start & myDates <= end)) %>%
  ungroup()

# 输出结果
correctdatesToSearch

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.27 16:30:15