Рассчитать продолжительность времени между различными событиями - PullRequest
0 голосов
/ 08 июня 2018

У меня есть набор данных:

here_dat <- '
ID,Event,Date
1,Pre-trans,01-01-2018
1,Event1 start,09-01-2018
1,Trans,19-01-2018
1,Trans,09-01-2018
1,Event1 end,19-01-2018
1,Post-trans,20-01-2018
1,Event2 start,21-01-2018
1,Trans,22-01-2018
1,Trans,23-01-2018
2,Pre-trans,01-01-2018
2,Event1 start,07-01-2018
3,Pre-trans,01-01-2018
3,Event2 start,09-01-2018
3,Trans,11-01-2018
3,Trans,13-01-2018
3,Trans,14-01-2018
3,Trans,17-01-2018
3,Event2 end,19-01-2018
3,Event1 start,25-01-2018
3,Event1 end,27-02-2018
'
events <- read.table(text=here_dat, sep=",", header=TRUE, stringsAsFactors=FALSE)
  1. Существует два типа событий: Event1 и Event2
  2. Начало / конец Event1 не будет перекрываться с началом / концом Event2
  3. События могут не иметь даты окончания

Я хочу рассчитать продолжительность времени между каждым типом события для каждого идентификатора.Если у события нет даты окончания, используйте текущую дату в качестве конца.

Идеальный результат:

ID Event.type Event.startDate Duration
1 Event1 09-01-2018 10
1 Event2 21-01-2018 138
2 Event1 07-01-2018 152
3 Event2 09-01-2018 10
3 Event1 25-01-2018 2

1 Ответ

0 голосов
/ 08 июня 2018

Вы можете попробовать

library(tidyverse) 
events %>% 
  as.tibble() %>% 
  mutate(Date=as.Date(Date, format="%d-%m-%Y")) %>% 
  separate(Event, letters[1:2], sep=" ") %>% 
  filter(grepl("Event", a)) %>% 
  spread(b, Date) %>% 
  mutate(Duration=ifelse(is.na(end), Sys.Date() - start, end- start))
# A tibble: 5 x 5
     ID a      end        start      Duration
  <int> <chr>  <date>     <date>        <dbl>
1     1 Event1 2018-01-19 2018-01-09       10
2     1 Event2 NA         2018-01-21      138
3     2 Event1 NA         2018-01-07      152
4     3 Event1 2018-02-27 2018-01-25       33
5     3 Event2 2018-01-19 2018-01-09       10

Идея состоит в том, чтобы распределить начало и конец, чтобы легко вычесть обе даты.Здесь мы можем использовать функции tidyverse для преобразования столбцов Date и Event.Затем separate до filter для «Envents» и, наконец, spread.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...