Проблема с переменными времени, использующими strptime - PullRequest
0 голосов
/ 27 марта 2019

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

Я включу ссылку, если вы хотите весь набор данных:

https://drive.google.com/file/d/11BXmJCB5UGEIRmVkM-yxPb_dHeD2CgXa/view?usp=sharing

Затем я запустил следующий код

    Delays <- read.table("FlightDelays.csv", header=T, sep=",")
    DepatureTime <- strptime(formatC(Delays$deptime, width = 4, format = "d", flag = "0"), "%H%M")
    ScheduleTime <- strptime(formatC(Delays$schedtime, width = 4, format = "d", flag = "0"), "%H%M")
    DelayTime <- as.numeric(difftime(DepatureTime, ScheduleTime))/60
    DelayData <- data.frame(DelayTime, Delays)

Приведенный выше код позволил мне получить время задержки в минутах

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

    structure(list(schedtime = c(1455, 1640, 1245, 1715, 1039 , 2120), deptime = c(1455, 1640, 1245, 1709, 1035, 0010)), .Names = c("schedtime",  "deptime"), row.names = c(NA, 6L), class = "data.frame")

и если вы запустите код, который я делал в начале, задержка в минутах для 6-го наблюдения составит -1270 минут, а не 170 минут, поскольку я считаю, strptime предполагает, что вы все еще в том же дне и не признает, что из-за задержки время отправления составило ранние часы следующего дня.

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

Спасибо за любую помощь

1 Ответ

1 голос
/ 27 марта 2019

Использование lubridate:

library(lubridate)
ScheduleTime <- as_datetime(formatC(Delays$schedtime, width = 4, format = "d", flag = "0"),format="%H%M")
DepatureTime <- as_datetime(formatC(Delays$deptime, width = 4, format = "d", flag = "0"),format="%H%M") + hours(ifelse(Delays$deptime < Delays$schedtime & Delays$schedtime > 2000,24,0))
DelayTime <- difftime(DepatureTime, ScheduleTime)/60
DelayData <- data.frame(DelayTime, Delays)

Проблема в том, что вы должны решить, когда это не резонно, что меньшее значение deptime по сравнению с schedtime соответствует не дневной смене, а полету, вылетающему рано. Я не вижу общего пути вокруг этого.

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