2013-10-28 89 views
0

我有一個關於從R中減去時間列的問題。我有三列需要從另一列中減去以獲得總觀察時間。我需要做 (TIMEEND-TIMESTART)-TIMEOUT減去R中的三個時間列

當我使用OBSTIME <- difftime(pipers$TIMEEND, pipers$TIMESTART, units = "hours")時,我得到第一部分,但是如何從中減去TIMEOUT。還是有一種方法可以同時減去所有三列?這是甚至正確的格式要做到這一點?

預先感謝您的幫助!

米歇爾

$ TIMESTART : POSIXct, format: "2013-10-28 10:30:00" "2013-10-28 14:50:00" "2013-10-28 14:50:00" ... 
$ TIMEEND : POSIXct, format: "2013-10-28 12:30:00" "2013-10-28 16:50:00" "2013-10-28 16:50:00" ... 
$ TIMEOUT : POSIXct, format: "2013-10-28 00:04:00" "2013-10-28 00:10:00" "2013-10-28 00:10:00" .. 
+1

'TIMEOUT'真的是一個持續時間嗎? –

+0

從difftime中減去日期時間值是沒有意義的。 –

回答

0

假設 TIMEOUT原指一個期間,在觀察回合,其以某種方式已經被轉換成一個POSIXct「斷」。所以現在看來​​是一個日期。那麼,鑑於我的猜測與現實有關,你可以嘗試這樣的事情。在這裏,我使用包lubridate中的函數hourminute來提取'out'對象的相關(我的猜測...)部分。

library(lubridate) 

# using your first set of times/periods as example 
end <- as.POSIXct("2013-10-28 12:30:00") 
start <- as.POSIXct("2013-10-28 10:30:00") 
out <- as.POSIXct("2013-10-28 00:04:00") 

# calculate total duration as difference between 'end' and 'start', in units minutes 
tot <- as.numeric(difftime(end, start, units = "mins")) 

# calculate break in minutes using hour and minute components extracted from 'out'. 
out_min <- (hour(out) * 60 + minute(out)) 

# calculate net duration of observation 
tot - out_min 
# [1] 116 

當然,這需要如果在「超時」額外的時間單位,例如要調整幾秒或幾天。