首页 > 解决方案 > 查找一组(ID)中的连续出现

问题描述

我的数据集如下所示:

ID start.date  end.date    program
1  2016.05.05  2017.05.05  A
1  2017.05.06  2019.06.16  A
2  2012.06.05  2013.06.18  B
3  2014.09.09  2017.07.01  B
3  2017.09.09  2018.09.09  B

我想识别连续出现在程序(字符变量)中的人,然后计算每个 end.date 和 start.date 之间的时间(如果出现是连续的)。

所以生成的数据应该是这样的:

ID start.date  end.date    program  days
1  2016.05.05  2017.05.05  A         NA
1  2017.05.06  2019.06.16  A .       1   
2  2012.06.05  2013.06.18  B .       NA
3  2014.09.09  2017.07.01  B .       NA
3  2017.09.09  2018.09.09  B .       63

不知道如何从这个开始!

标签: r

解决方案


library(dplyr)
dat %>%
  group_by(ID, program) %>%
  arrange(start.date) %>%  # Added in case the data isn't sorted
  mutate(days = start.date - lag(end.date))

不过,我得到的结果略有不同:

# A tibble: 5 x 5
# Groups:   ID, program [3]
     ID start.date end.date   program days  
  <int> <date>     <date>     <chr>   <time>
1     1 2016-05-05 2017-05-05 A       NA    
2     1 2017-05-06 2019-06-16 A       1     
3     2 2012-06-05 2013-06-18 B       NA    
4     3 2014-09-09 2017-07-01 B       NA    
5     3 2017-09-09 2018-09-09 B       70 

为了引入数据,我转换为日期:

dat <- read.table(header = T, stringsAsFactors = F, 
text = "ID start.date  end.date    program
        1  2016.05.05  2017.05.05  A
        1  2017.05.06  2019.06.16  A
        2  2012.06.05  2013.06.18  B
        3  2014.09.09  2017.07.01  B
        3  2017.09.09  2018.09.09  B") %>%
  mutate_at(vars(matches("date")), lubridate::ymd)

推荐阅读