6

「118:34:42」のような形式で最大 118 時間の一連の期間があります。ここで、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 に答える