我需要班次开始和结束时间之间的小时差异。开始和结束时间是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
答案 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
}