2012-07-02 40 views
4

lubridate中的簡單問題 - 我想將hms對象轉換爲自一天開始以來的適當秒數。在R中,使用lubridate將hms對象轉換爲秒

例如

library(lubridate) 
hms("12:34:45") 

那麼我想知道12小時,34分鐘,45秒究竟有多長,在秒

明顯的東西像

seconds(hms("12:34:45")) 

只是返回

45s 

這不是我想要的。我如何將這些hms值轉換爲秒?我想使用lubridate

+0

'as.duration()'也許? – joran

回答

8

使用哪個軟件包無關緊要 - 它將把日期/日期時間對象轉換爲自時代以來秒數的POSIXct表示。所以,你不妨做它在基礎R - 所以這裏用任意一天的部署ISOdatetime(),今天使用:

R> difftime(ISOdatetime(2012,7,2,12,34,45), ISOdatetime(2012,7,2,0,0,0)) 
Time difference of 12.5792 hours 

因此,我們要秒:

R> difftime(ISOdatetime(2012,7,2,12,34,45), ISOdatetime(2012,7,2,0,0,0), 
+   unit="secs") 
Time difference of 45285 secs 

我們可以轉換爲數字:

R> as.numeric(difftime(ISOdatetime(2012,7,2,12,34,45), + 
         ISOdatetime(2012,7,2,0,0,0), unit="secs")) 
[1] 45285 

編輯:,能重返lubridate,這無疑是一個錯誤:

> hms("12:34:45") - hms("00:00:00") 
[1] 12 hours, 34 minutes and 45 seconds 
R> as.numeric(hms("12:34:45") - hms("00:00:00")) 
[1] 45 
R> 
+0

是的,這會比僅僅將「as.duration」(我認爲)簡單地將每個片段轉換爲「默認」秒數更準確。在lubridate中,你必須首先將它轉換爲間隔,這基本上是你在這裏做的,我想。 – joran

+0

lubridate並沒有發明新的時間類型,所以你建議的as.duration()可能有效,或者可能與hms(「00:00:00」)有所不同,或者...... –

+0

感謝這個出色的答案Dirk。 – tomw

16
R>lubridate::period_to_seconds(hms("01:00:00")) 

給出預期3600秒爲數字計數從00:00:00 或在上面的情況下:

R>period_to_seconds(hms("12:34:45"))