簡體   English   中英

R as.difftime()問題的發布時間超過1天

[英]R as.difftime() issue for times longer than 1 day

我需要將時間間隔格式為%H:%M:%S(類=因子)轉換為類= difftime。 我當前正在使用as.difftime()來執行此操作,但是當小時值> 23時它將返回NA。

TimeElapsed_raw = as.factor(c("03:59:59", "21:00:00", "01:03:46", "44:00:00", "24:59:59"))
TimeElapsed = as.difftime(as.character(TimeElapsed_raw), format = "%H:%M:%S")
TimeElapsed

Time differences in hours
[1]  3.999722 21.000000  1.062778        NA        NA

無論是否在as.difftime()中包含format語句,我都有相同的問題:

as.difftime("65:01:17")
Time difference of NA secs

但這有效:

as.difftime(65.1, units = "hours")
Time difference of 65.1 hours

我也嘗試過使用lubridate as.duration()函數,但是它計算出的值似乎沒有意義。

as.duration(TimeElapsed_raw)
[1] "2s" "3s" "1s" "5s" "4s"

任何幫助,將不勝感激!

您可以先將數據格式更改為xH xM xS,這在lubridateduration函數可以理解:

x=gsub("(^\\d{2}):(\\d{2}):(\\d{2})$","\\1H \\2M \\3S",as.character(TimeElapsed_raw))
[1] "03H 59M 59S" "21H 00M 00S" "01H 03M 46S" "44H 00M 00S" "24H 59M 59S"

然后申請duration

duration(x)
[1] "14399s (~4 hours)"     "75661s (~21.02 hours)" "3826s (~1.06 hours)"  
[4] "158461s (~1.83 days)"  "89999s (~1.04 days)"  

否則,使用as.difftime ,您可以先將數據分為小時,分鍾和秒,然后分別將每個數據饋送到as.difftime

v=lapply(strsplit(TimeElapsed_raw,":"),function(x) {as.difftime(as.numeric(x[1]),units="hours")+as.difftime(as.numeric(x[2]),units="mins")+as.difftime(as.numeric(x[3]),units="secs")})

[[1]]
Time difference of 14399 secs

[[2]]
Time difference of 75600 secs

[[3]]
Time difference of 3826 secs

[[4]]
Time difference of 158400 secs

[[5]]
Time difference of 89999 secs

如果要將列表轉換為向量,請確保之后將其重新轉換為difftime ,因為unlist會丟失該類。

v=as.difftime(unlist(v),unit="secs")

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM