Как рассчитать длительность переменной DTM? - PullRequest
0 голосов
/ 02 июня 2018

У меня есть следующий набор данных

  flight DateTime           
  <chr>  <dttm>             
1 1      2016-08-16 07:56:06
2 1      2016-08-16 07:57:10
3 1      2016-08-16 07:57:07
4 2      2016-08-15 18:35:09
5 2      2016-08-15 18:39:51
6 2      2016-08-15 18:46:53
7 3      2016-08-16 14:02:33
8 3      2016-08-16 13:25:10
9 3      2016-08-16 13:39:43
   dt <- structure(list(flight = c("1", "1", "1", "2", "2", "2", "3", 
"3", "3"), DateTime = structure(c(1471334352, 1471334210, 1471334262, 
1471286072, 1471284963, 1471286347, 1471356056, 1471355584, 1471353810
), class = c("POSIXct", "POSIXt"), tzone = "UTC")), class = c("tbl_df", 
"tbl", "data.frame"), row.names = c(NA, -9L))

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

dt %>% group_by(flight) %>% 
filter(DateTime == max(DateTime) | DateTime == min(DateTime)) %>% 
mutate(dur = if_else(DateTime == max(DateTime), 'Max', 'Min')) %>% 
spread(dur, DateTime) %>% mutate(duration = Max - Min)


# A tibble: 3 x 4
# Groups:   flight [3]
  flight Max                 Min                 duration        
  <chr>  <dttm>              <dttm>              <time>          
1 1      2016-08-16 07:59:12 2016-08-16 07:56:50 2.36666666666667
2 2      2016-08-15 18:39:07 2016-08-15 18:16:03 23.0666666666667
3 3      2016-08-16 14:00:56 2016-08-16 13:23:30 37.4333333333333

1 Ответ

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

Вам не нужно использовать спред, это работает так же, если ваша цель - только вычислить разницу во времени:

dt %>%
  group_by(flight) %>%
  summarise(duration = difftime(min(DateTime),max(DateTime),units = "hours"))
...