使用strptime的时间变量问题

时间:2019-03-27 18:19:56

标签: r regression

我目前正在一个项目上,需要一些帮助。我想使用统计模型预测航班延误的时长。该数据集不包含航班延误的时长,但可以根据实际和计划的起飞时间进行计算。

如果您需要整个数据集,我将提供一个链接:

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")

如果您运行的是我一开始所做的代码,那么第六次观察的延迟时间将为-1270分钟,而不是170分钟的延迟,因为我相信strptime会假设您仍然在同一时间,并且没有意识到延误导致了出发时间是第二天的早些时候。

我如何获取识别延迟的代码,有时会意味着出发时间会持续到第二天?

谢谢您的帮助

1 个答案:

答案 0 :(得分:1)

使用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较小的值并不代表白班,而是代表航班早点离开。我没有找到解决这个问题的一般方法。