R 计算隔夜时差(开始时间为下午,结束时间为第二天上午)
R Calculating overnight time difference (when start time is PM and end time is AM of the next day)
我需要轮班开始时间和结束时间之间的小时差。开始和结束时间是 12 小时 am/pm 格式的字符串。我们可以假设开始时间都在同一日历日,但结束时间可以到第二天(夜班)。 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
这应该可以做到。
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
}
我需要轮班开始时间和结束时间之间的小时差。开始和结束时间是 12 小时 am/pm 格式的字符串。我们可以假设开始时间都在同一日历日,但结束时间可以到第二天(夜班)。 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
这应该可以做到。
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
}