2012-12-21 103 views
4

我有一系列的持續時間,如「118:34:42」,其中118是小時,34是分鐘,42是秒的格式,範圍長達118小時。輸出應該是幾秒鐘。工作持續時間超過24小時在R

我想將它轉換爲R中的某種時間類型,但我查看過的大多數庫都想添加日期(lubridate,zoo,xts),或返回「NA」,這是由於小時超過了24小時的範圍。我可以解析字符串並返回幾秒鐘,但我想知道是否有更快的方法。

我稍微有點新R(可能與此合作3個月)。

任何幫助搞清楚如何處理這將不勝感激。

實施例:

library(lubridate) 
    x <- c("118:34:42", "114:12:12") 
    tt <- hms(x) 
    Error in parse_date_time(hms, orders, truncated = truncated, quiet = TRUE) : 
    No formats could be infered from the training set. 
    #try another route 
    w <- "118:34:42" 
    tt2 <- hms(w) 
    tt2 
    #[1] NA 
    z <- "7:02:02" 
    tt3 <- hmw(z) 
    tt3 
    #[1] "7H 2M 2S" 
+0

您可以將時間轉換爲秒:'library(gsubfn); secs < - c(strapply(x,「\\ d +」,as.numeric)%*%c(3600,60,1))'然後在幾秒鐘內完成所有處理。要轉換回來:'sprintf(「%d:%02d:%02d」,secs%/%3600,secs%/%60 %% 60,secs %% 60) –

回答

5

lubridate包有一個函數hms()返回一個時間對象:

library(lubridate) 

x <- c("118:34:42", "114:12:12") 
tt <- hms(x) 

tt 
[1] 118 hours, 34 minutes and 42 seconds 
[2] 114 hours, 12 minutes and 12 seconds 

hms()返回Period類的一個對象的函數:

str(tt) 
Formal class 'Period' [package "lubridate"] with 6 slots 
    [email protected] .Data : num [1:2] 42 12 
    [email protected] year : num [1:2] 0 0 
    [email protected] month : num [1:2] 0 0 
    [email protected] day : num [1:2] 0 0 
    [email protected] hour : num [1:2] 118 114 
    [email protected] minute: num [1:2] 34 12 

您可以使用這些對象進行算術運算。例如:

tt[2] - tt[1] 
[1] -4 hours, -22 minutes and -30 seconds 
+0

我仍然拿到NA。這是我收到的輸出:'code'tt < - hms(timecolumn) > head(timecolumn) [1]「115:53:34」「7:13:27」「12:12:55」「 (「tt」) [1] NA「7H 13M 27S」「12H 12M 55S」「3H 28M 35S」「3H 5M 23S」 「」10M 30S「'code' – alplv

+0

@alplv爲了追蹤這個,你必須提供更多關於你的設置的信息,例如R的版本,Lubridate的版本等。 – Andrie

+0

運行Lubridate 1.20,R 2.15.2。我今天早上跑了一些更新,只是爲了檢查是否有任何軟件包過時了。試圖現在調試該問題。走過幾條路,看看我能否從Lubridate的幫助中找到任何東西。感謝迄今爲止的指針。 – alplv

相關問題