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

R语言按组+重叠时间区间分组并保留最高优先级行问题

问题:按组筛选无重叠且优先级最高的时间窗口记录

原始数据集

data <- data.frame(
  group_ID = c("cred", "cred", "cred", "cyellow", "cyellow", "cgreen"), 
  Start = c("2024-06-27,10:31:34", "2024-06-27,10:42:26", "2024-06-27,12:33:00", "2024-06-27,12:34:00","2024-06-27,12:54:00","2024-06-28,14:58:51"), 
  End = c("2024-06-27,11:31:34","2024-06-27,11:42:26","2024-06-27,13:33:00", "2024-06-27,13:34:00","2024-06-27,13:54:00","2024-06-28,15:54:14"),
  priorityrank = c(1, 2, 2, 2, 3, 3),
  goaltokeep = c(TRUE, FALSE, TRUE, TRUE, FALSE, TRUE)
)

需求说明

每行代表某组在特定时间窗口的观测记录。同一组可能存在多人同时观测的情况,因此设置了priorityrank(优先级排名),数值越小优先级越高,1为最高优先级,3为最低优先级。不同组的时间重叠无需处理。

核心目标:对于同一组,当存在多个时间窗口重叠的观测时,保留priorityrank数值最小的行。示例数据中的goaltokeep列标记了最终应保留的行(TRUE)。

尝试过程与问题

  • 曾参考按ID评估时间重叠的方法,但运行示例数据时,所用代码出现如下错误:
Error in eval_tidy(args[[j]], mask) : 
  no function to return from, jumping to top level
  • 另有一个思路相近的SQL相关问题,但因不熟悉SQL,不知道如何在R中实现类似操作。

更新:批量处理时的报错情况

在处理包含1000条记录的数据集时,两种可行方案均在约60个案例中出现意外错误,即使按开始时间排序后错误仍存在。

报错案例数据集

dataerr <- data.frame(
  group_ID = c("cred", "cred", "cred"), 
  Start = c("2024-06-27,12:33:00","2024-06-27,13:26:57","2024-06-27,13:33:36"), 
  End = c("2024-06-27,13:33:00","2024-06-27,13:48:49","2024-06-27,13:49:42"),
  priorityrank = c(2, 3, 2),
  goaltokeep = c(TRUE, FALSE, TRUE)
)

两种方案的报错信息

  1. Friede方案报错:
Error in `iv()`:
! `start` must be less than `end`.
ℹ `start` is not less than `end` at locations: `2`.
  1. r2evans方案报错:
Error in `[[<-.data.frame`(`*tmp*`, col, value = c("cred", "cred", "cred",  : 
  replacement has 6 rows, data has 3

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.13 10:12:48