Разница во времени в R по группам на основе условия и двух столбцов времени - PullRequest
0 голосов
/ 01 июня 2019

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

  • Сгруппировал мои данные по идентификатору
  • Упорядочено по идентификатору

Так выглядят данные.Я хотел бы, чтобы вывод был столбцом time_diff.Любая помощь будет очень ценится!

ID: Status:    Start-time:   End-time:    time-diff:
1   Active      01/01/2018       NA           0
1   Complete      NA         01/02/2018       1
2   Active      03/02/2018                    0
2   Active        NA                          0
2   Complete      NA         03/06/2018       4

1 Ответ

0 голосов
/ 01 июня 2019

Если принять разницу во времени между временем и значением NA, то просто вернемся NA. Более значимым подходом было бы взять индивидуальное время, отличное от каждого события, а затем подвести итоги по каждой группе (id).

d <- tibble(id = c(1,1,2,2),
            st = ymd(c("2019-05-03", "2019-02-06", "2019-07-11","2019-05-13")),
            et = ymd(c("2019-05-10", "2019-02-16", "2019-07-04","2019-05-09")))

d2 <- d %>% 
  mutate(td  = et-st,         # calculate the time difference (td)
         atd = abs(td)) %>%   # calculate the absolute td (atd)
d2

# A tibble: 4 x 5
     id st         et         td      atd    
  <dbl> <date>     <date>     <time>  <time> 
1     1 2019-05-03 2019-05-10  7 days  7 days
2     1 2019-02-06 2019-02-16 10 days 10 days
3     2 2019-07-11 2019-07-04 -7 days  7 days
4     2 2019-05-13 2019-05-09 -4 days  4 days

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

d2 %>%
  group_by(id) %>%            # for each group (id)
  summarise(mtd = mean(atd))  # calculate the mean time difference (mtd)

# A tibble: 2 x 2
     id mtd     
  <dbl> <time>  
1     1 8.5 days
2     2 5.5 days
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...