4

R で 05:30 (5 分 30 秒) などの時間帯を処理する良い方法はありますか?

あるいは、数秒で整数に変換する最速の方法は何ですか?

日付にしか変換できず、時間のデータ型を実際に見つけることができません。

私はZooでRを使用しています。

どうもありがとう !


Seconds がこれに対処する最良の方法でした。以下のシェーンのコードを目的に合わせて調整しました。結果は次のとおりです。

# time - time in the format of dd hh:mm:ss
#       (That's the format used in cvs export from Alcatel CCS reports)
#
time.to.seconds <- function(time) {

   t <- strsplit(as.character(time), " |:")[[1]]
   seconds <- NaN

   if (length(t) == 1 )
      seconds <- as.numeric(t[1])
   else if (length(t) == 2)
      seconds <- as.numeric(t[1]) * 60 + as.numeric(t[2])
   else if (length(t) == 3)
      seconds <- (as.numeric(t[1]) * 60 * 60 
          + as.numeric(t[2]) * 60 + as.numeric(t[3]))   
   else if (length(t) == 4)
      seconds <- (as.numeric(t[1]) * 24 * 60 * 60 +
         as.numeric(t[2]) * 60 * 60  + as.numeric(t[3]) * 60 +
         as.numeric(t[4]))

   return(seconds)
}
4

2 に答える 2

8

はい、「時間」タイプはありませんが、オフセット時間を使用できます。

R> now <- Sys.time()
R> now
[1] "2009-09-07 08:40:32 CDT"
R> class(now)
[1] "POSIXt"  "POSIXct"
R> later <- now + 5*60
R> later
[1] "2009-09-07 08:45:32 CDT"
R> class(later)
[1] "POSIXt"  "POSIXct"
R> tdelta <- difftime(later, now)
R> tdelta
Time difference of 5 mins
R> class(tdelta)
[1] "difftime"
R> 

Zooパッケージを使用する場合POSIXt、時間インデックスに標準型を使用しています。Zooと、新しくて強く推奨されている xtsパッケージの両方POSIXtで、特にコンパクトPOSIXctタイプをインデックス作成に使用できます。

xts パッケージにはさらに多くのインデックス機能があり、Jeff は最近、ISO8601-2004(e) 仕様に従って間隔の解析を追加し、ISO8601 に関するこれらの参照 広く使用されている日付と時刻の形式の標準に関する FAQ を提供しています。この xts バージョンを使用するには、r-forge で xts 開発スナップショットを切り替える必要がある場合があります

[編集: ] また、「変換」に関する質問について: クラス POSIXt / POSIXct のオブジェクトがあればas.numeric()、エポックから POSIXct を (小数) 秒に変換するのは簡単です。R は POSIX 標準よりさらに進んでおり、ここでは double を使用しているため、ミリ秒の精度が得られます。

R> options("digits.secs"=6)   ## needed so that fractional seconds are printed
R> now <- Sys.time(); difftime(Sys.time(), now)
Time difference of 0.000149 secs

R> print(as.numeric(now), digits=15)   ## print with digits for sub-second time
[1] 1252374404.22975
R> 
于 2009-09-07T13:51:31.620 に答える
5

Dirkが指摘しているように、「difftime」というオブジェクトがありますが、加算/減算することはできません。

> as.difftime(5, units="mins")
Time difference of 5 mins

> d <- seq(from=as.POSIXct("2003-01-01"), to=as.POSIXct("2003-01-04"), by="days")
> d
[1] "2003-01-01 GMT" "2003-01-02 GMT" "2003-01-03 GMT" "2003-01-04 GMT"

> d + as.difftime(5, units="mins")
[1] "2003-01-01 00:00:05 GMT" "2003-01-02 00:00:05 GMT"
[3] "2003-01-03 00:00:05 GMT" "2003-01-04 00:00:05 GMT"
Warning message:
Incompatible methods ("+.POSIXt", "Ops.difftime") for "+" 

これでできるようになりました:

  > as.difftime(5, units='mins')
    Time difference of 5 mins
    > d <- seq(from=as.POSIXct("2003-01-01"), to=as.POSIXct("2003-01-04"), by="days")
    > d 
    [1] "2003-01-01 GMT" "2003-01-02 GMT" "2003-01-03 GMT" "2003-01-04 GMT"
    > d + as.difftime(5, unit='mins')
    [1] "2003-01-01 00:05:00 GMT" "2003-01-02 00:05:00 GMT"
    [3] "2003-01-03 00:05:00 GMT" "2003-01-04 00:05:00 GMT"
    > d + as.difftime(5, unit='secs')
    [1] "2003-01-01 00:00:05 GMT" "2003-01-02 00:00:05 GMT"
    [3] "2003-01-03 00:00:05 GMT" "2003-01-04 00:00:05 GMT"
   >

これは最近リリースされたR2.15.0の場合です

于 2009-09-07T19:48:45.877 に答える