6

我有一系列持续时间最长可达 118 小时的格式,例如“118:34:42”,其中 118 是小时,34 是分钟,42 是秒。输出应该是秒数。

我想将其转换为 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"
4

1 回答 1

7

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
  ..@ .Data : num [1:2] 42 12
  ..@ year  : num [1:2] 0 0
  ..@ month : num [1:2] 0 0
  ..@ day   : num [1:2] 0 0
  ..@ hour  : num [1:2] 118 114
  ..@ minute: num [1:2] 34 12

您可以使用这些对象进行算术运算。例如:

tt[2] - tt[1]
[1] -4 hours, -22 minutes and -30 seconds 
于 2012-12-21T07:33:12.090 回答