Найти последовательные вхождения в группе (идентификаторов) - PullRequest
0 голосов
/ 11 октября 2018

Мой набор данных выглядит следующим образом:

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 и началом.дата (если происшествие было последовательным).

Таким образом, полученные данные должны выглядеть следующим образом:

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

Не знаю, с чего начать!

1 Ответ

0 голосов
/ 11 октября 2018
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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...