Как рассчитать разницу во времени и сложить ее со временем старта? - PullRequest
1 голос
/ 26 июня 2019

Я пытаюсь создать модель линейной регрессии между двумя временными точками (отображаемыми как время суток) - скажем, «отправлено» и «получено» - чтобы определить, есть ли определенное время дня (или промежуток времени). ) что отправляемый товар влияет на время его прибытия. Например, если товар отправлен ближе к обеду, будет ли он доставлен позже, чем если бы он был отправлен утром?

Мой фрейм данных выглядит примерно так:

                Dispatched             Received
52756  2018-11-05 11:41:00  2018-11-05 11:49:00
52764  2018-10-05 08:03:00  2018-10-05 08:03:00
52772  2018-08-24 07:36:00  2018-08-24 07:37:00
52780  2018-07-26 07:37:00  2018-07-26 07:40:00
52788  2018-07-12 08:00:00  2018-07-12 08:01:00
52796  2018-05-30 12:54:00  2018-05-31 07:25:00
52805  2018-05-30 12:54:00  2018-05-31 07:25:00
52814  2018-06-14 09:05:00  2018-06-14 09:07:00
52820  2018-06-14 09:05:00  2018-06-14 09:07:00
52826  2018-06-14 09:05:00  2018-06-14 09:07:00
52829  2018-06-14 09:05:00  2018-06-14 09:07:00
52835  2018-06-18 11:00:00  2018-06-19 08:06:00
52843  2018-03-12 11:34:00  2018-03-13 09:53:00
52851  2018-07-03 13:14:00  2018-07-03 13:15:00
52853  2018-07-03 13:14:00  2018-07-03 13:15:00

Эти даты уже являются POSIXct() объектами.

Далее, поскольку день меня не интересует, я создаю 2 дополнительных столбца с указанием времени:

                Dispatched             Received Disp_time Rcvd_time
52756  2018-11-05 11:41:00  2018-11-05 11:49:00  11:41:00  11:49:00
52764  2018-10-05 08:03:00  2018-10-05 08:03:00  08:03:00  08:03:00
52772  2018-08-24 07:36:00  2018-08-24 07:37:00  07:36:00  07:37:00
52780  2018-07-26 07:37:00  2018-07-26 07:40:00  07:37:00  07:40:00
52788  2018-07-12 08:00:00  2018-07-12 08:01:00  08:00:00  08:01:00
52796  2018-05-30 12:54:00  2018-05-31 07:25:00  12:54:00  07:25:00
52805  2018-05-30 12:54:00  2018-05-31 07:25:00  12:54:00  07:25:00
52814  2018-06-14 09:05:00  2018-06-14 09:07:00  09:05:00  09:07:00
52820  2018-06-14 09:05:00  2018-06-14 09:07:00  09:05:00  09:07:00
52826  2018-06-14 09:05:00  2018-06-14 09:07:00  09:05:00  09:07:00
52829  2018-06-14 09:05:00  2018-06-14 09:07:00  09:05:00  09:07:00
52835  2018-06-18 11:00:00  2018-06-19 08:06:00  11:00:00  08:06:00
52843  2018-03-12 11:34:00  2018-03-13 09:53:00  11:34:00  09:53:00
52851  2018-07-03 13:14:00  2018-07-03 13:15:00  13:14:00  13:15:00
52853  2018-07-03 13:14:00  2018-07-03 13:15:00  13:14:00  13:15:00

Таким образом, если разница во времени находится в пределах одного дня, я могу построить график (ggplot2::ggplot()) и вычислить кривую регрессии (ggpubr::stat_cor()) без проблем.

Однако, если вы посмотрите, например, на позиции «52796», «52805», «52835» и «52843», они отправляются в один день, но доставляются на следующий день. И это проблема при построении графика (Disp_time vs Rcvd_time).

Итак, я думал о том, как преодолеть это, просто добавив разницу во времени к "Rcvd_time", даже если она превышает 24 часа. Например, эти строки:

                Dispatched             Received Disp_time Rcvd_time
52796  2018-05-30 12:54:00  2018-05-31 07:25:00  12:54:00  07:25:00
52805  2018-05-30 12:54:00  2018-05-31 07:25:00  12:54:00  07:25:00
52835  2018-06-18 11:00:00  2018-06-19 08:06:00  11:00:00  08:06:00
52843  2018-03-12 11:34:00  2018-03-13 09:53:00  11:34:00  09:53:00

Может быть представлен как:

                Dispatched             Received Disp_time Rcvd_time
52796  2018-05-30 12:54:00  2018-05-31 07:25:00  12:54:00  30:29:00
52805  2018-05-30 12:54:00  2018-05-31 07:25:00  12:54:00  30:29:00
52835  2018-06-18 11:00:00  2018-06-19 08:06:00  11:00:00  32:06:00
52843  2018-03-12 11:34:00  2018-03-13 09:53:00  11:34:00  33:19:00

Есть идеи, как это сделать? Заранее спасибо!

1 Ответ

1 голос
/ 26 июня 2019

Возможно, вы захотите взглянуть на функцию difftime.

Dispatched <- as.POSIXct('2018-05-30 12:54:00')
Received <- as.POSIXct('2018-05-31 07:25:00')

time_delta <- difftime(Received, Dispatched, units = 'minutes')
time_delta

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