2015-01-15 54 views
1

我需要換班開始和結束時間之間的小時差。開始和結束時間是12小時am/pm格式的字符串。我們可以假設開始時間都在同一個calandar日,但結束時間可以在第二天(隔夜轉換)。 difftime將它們視爲同一日期,導致計算錯誤方向的差異:如果開始時間爲晚上7:00,結束時間爲上午4:00,則9小時班次計算爲15小時。是否有可能計算這些時間差異而不創建更復雜的功能?R計算隔夜時差(當開始時間是PM,結束時間是第二天的AM時)

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

我想你可以只保存結果的地方,然後添加'24'到負值,像'溫度< - as.numeric(difftime( strptime(DF [,2],「我% :%M%p「), strptime(df [,1],」%I:%M%p「), units ='hours')); temp [temp <0] < - temp [temp <0] + 24' –

回答

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 
} 
相關問題