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) )
两种方案的报错信息
- Friede方案报错:
Error in `iv()`: ! `start` must be less than `end`. ℹ `start` is not less than `end` at locations: `2`.
- r2evans方案报错:
Error in `[[<-.data.frame`(`*tmp*`, col, value = c("cred", "cred", "cred", : replacement has 6 rows, data has 3
内容的提问来源于stack exchange,提问作者CSStat
相关产品推荐
相关产品推荐

