处理 R 中 table 中的以下日期

Deal with following dates in a table in R

我的问题很容易解释:

Table with rows where dates follow

Result i need

我尝试使用 for 循环来比较两个日期向量(从列中提取的向量),但它实际上不起作用...

我试过类似这样的方法来确定开始日期和结束日期:

'''

a = sort(data$Date_debut)
b = sort(data$Date_fin)

for(i in 1:(length(a)-1)){
   for(j in 2:length(a)){
      datedeb = a[j-1]
      if(b[i]+1 == a[j]){
       while(b[i]+1 == a[j] ){
          datefin = b[i+1]
          i = i+1}
      
    }
 }
}

''' datedeb = 开始日期 datefin = 结束日期

感谢您的帮助,我愿意接受处理此问题的想法/方法。

这是一种使用 tidyverse 的方法。对于每个 Var1 组,根据开始日期不等于上一行结束日期的时间创建包含索引的子组(将这些行与同一索引保持在一起)。然后您可以 group_by 同时使用 Var1 和索引,并使用 first 开始日期和 last 结束日期作为您的日期范围。

library(tidyverse)

df %>%
  group_by(Var1) %>%
  mutate(i = cumsum(Start_date != lag(End_date, default = as.Date(-Inf)) + 1)) %>%
  group_by(i, .add = T) %>%
  summarise(Start_date = first(Start_date), End_date = last(End_date)) %>%
  select(-i)

输出

  Var1  Start_date End_date  
  <chr> <date>     <date>    
1 A     2019-01-02 2019-04-09
2 A     2019-10-11 2019-10-11
3 B     2019-12-03 2019-12-20
4 C     2019-12-29 2019-12-31

数据

df <- structure(list(Var1 = c("A", "A", "A", "A", "B", "C"), Start_date = structure(c(17898, 
17962, 17993, 18180, 18233, 18259), class = "Date"), End_date = structure(c(17961, 
17992, 17995, 18180, 18250, 18261), class = "Date")), class = "data.frame", row.names = c(NA, 
-6L))