我需要查找多个项目期间每个组的天数.如果项目之间存在时间重叠,则天数不应在总数中计算超过一次.

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")
   

enter image description here

我想查找每个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) )

有没有办法做到这一点?由于每个小组的日期和项目存在差异,我很难计算总天数.谢谢你

推荐答案

谢谢我从这post中找到了答案.天数还应包括开始日期和结束日期.事实证明,从每个组的多个时期计算不同的天数是最简单的方法

data <- 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")), row.names = c(NA, 
                                                                                                                                                                                                                                                                                                                                                    15L), class = "data.frame")
data
 Group.ID Project.ID Start.Date   End.Date
1      BQNX          1 2023-10-25 2023-11-14
2      BQNX          2 2023-10-25 2023-11-21
3      CLXW          1 2023-10-23 2023-11-26
4      CLXW          2 2023-11-26 2023-12-02
5      CLXW          3 2023-12-03 2024-01-11
6      CLXW          4 2023-10-23 2023-11-25
7      CLXW          5 2023-11-26 2023-12-02
8      CLXW          6 2023-12-03 2024-01-11
9      CLXW          7 2023-10-23 2023-11-25
10     CXJR          1 2023-10-23 2023-10-25
11     CXJR          2 2023-10-23 2023-11-29
12     CXJR          3 2023-10-23 2023-11-29
13      DMM          1 2023-11-26 2023-12-02
14      DMM          2 2023-10-21 2023-11-25
15      DMM          3 2023-11-26 2023-12-02
data2 <- data %>% rowwise() %>% 
    do(tibble(Group.ID = .$Group.ID, 
              Date = seq(.$Start.Date, .$End.Date, by = 1))) %>%
    distinct() %>%
    ungroup() %>%
    count(Group.ID)
data2

  Group.ID     n
  <chr>    <int>
1 BQNX        28
2 CLXW        81
3 CXJR        38
4 DMM         43

R相关问答推荐

如果窗口在CLARME或集团之外,则有条件领先/滞后滚动总和返回NA

带有gplot 2的十字舱口

对lme 4对象运行summary()时出错(diag中的错误(from,names = RST):对象unpackedMatrix_diag_get找不到)

在使用ggroove后,将图例合并在gplot中

从R导出全局环境中的所有sf(numrames)对象

r替换lme S4对象的字符串的一部分

如何从R中的字符串元素中减go 一个数字?

如何编辑gMarginal背景以匹配绘图背景?

将饼图插入条形图

我正在努力用R计算数据集中的中值逐步距离

汇总数据帧中的复制列,保持行的唯一性

R中Gamma回归模型均方误差的两种计算方法不一致

将数据集旋转到长格式,用于遵循特定名称模式的所有变量对

为什么这个表格格罗布不打印?

使用shiny 中的所选要素行下拉菜单

使用来自嵌套列和非嵌套列的输入的PURRR:MAP和dplyr::Mariate

ggplot R:X,Y,Z使用固定/等距的X,Y坐标绘制六边形热图

计算多变量的加权和

Ggplot2:添加更多特定 colored颜色 的线条

如果y中存在x中的值,则将y行中的多个值复制到相应的x行中