我需要查找多个项目期间每个组的天数.如果项目之间存在时间重叠,则天数不应在总数中计算超过一次.
df<- structure(list(Group.ID = c("BQNX", "BQNX", "CLXW", "CLXW", "CLXW",
"CLXW", "CLXW", "CLXW", "CLXW", "CXJR", "CXJR", "CXJR", "DMM",
"DMM", "DMM"), Project.ID = c(1, 2, 1, 2, 3, 4, 5, 6, 7, 1, 2,
3, 1, 2, 3), Start.Date = structure(c(19655, 19655, 19653, 19687,
19694, 19653, 19687, 19694, 19653, 19653, 19653, 19653, 19687,
19651, 19687), class = "Date"), End.Date = structure(c(19675,
19682, 19687, 19693, 19733, 19686, 19693, 19733, 19686, 19655,
19690, 19690, 19693, 19686, 19693), class = "Date"), Days = structure(c(20,
27, 34, 6, 39, 33, 6, 39, 33, 2, 37, 37, 6, 35, 6), class = "difftime", units = "days")), row.names = c(NA,
15L), class = "data.frame")
我想查找每个Group.ID来自多个项目的总天数.如果两个项目有一些时间重叠,则该天应只计算一次.例如,
BQNX的项目1和项目2有一些重叠,因此BQNX的总天数只有27天.
CXJR有3个项目的开始日期相同,因此总天数仅为37天.
CLXW更复杂:项目1、4和7具有相同的开始日期,因此总长度为34天.项目2 5具有相同的开始和结束日期,并且开始日期恰好在项目1的结束日期之后,因此现在总长度为34 + 6 = 40天.那么项目3和6具有相同的日期,并且开始日期正好在项目2的结束日期之后,因此总长度现在是40 + 39 = 79天
我想要的最终数据帧只是每个Group. ID. Sth的连续天数,如下所示:
data.frame(Group.ID = c("BQNX", "CLXW", "CXJR"), Consecutive.Days = c(27,37,79) )
有没有办法做到这一点?由于每个小组的日期和项目存在差异,我很难计算总天数.谢谢你