R计算过夜时差(当开始时间是PM,结束时间是第二天的AM)

时间:2015-01-15 14:46:49

标签: r datetime

我需要班次开始和结束时间之间的小时差异。开始和结束时间是12小时上午/下午格式的字符串。我们可以假设开始时间都在相同的calandar日,但结束时间可以到达第二天(隔夜轮班)。 difftime将它们视为同一日期,导致在错误方向上计算的差异:如果开始时间是晚上7:00,结束时间是凌晨4:00,则9小时轮班计算为15小时。是否有可能在不创建更复杂功能的情况下计算这些时差?

df= structure(c("7:00 AM", "7:00 PM", "8:00 AM", "10:00 PM", 
            "4:00 PM", "4:00 AM", "5:00 PM", "6:00 AM"), .Dim = c(4L, 2L))

as.numeric(difftime(
   strptime(df[,2], "%I:%M %p" ),
   strptime(df[,1], "%I:%M %p" ),
   units='hours'))
[1]   9 -15   9 -16

我正在寻找的结果应该是:

[1] 9 9 9 8 

1 个答案:

答案 0 :(得分:3)

这应该这样做。

shift.dur <- function(m){
    hours<- as.numeric(difftime(
        strptime(df[,2], "%I:%M %p" ),
        strptime(df[,1], "%I:%M %p" ),
        units='hours'))
    hours[hours<0] <- 24+hours[hours<0] 
    hours
}