2013-01-23 20 views
5

私は自転車レースの結果を分析してRを学習しています。私は時間データ(人がどれだけレースを終えたか)に問題があります。時間、距離、スピードの使い方は?

時刻データのフォーマットは "HH:MM:SS"です。

私はそれをposixctに変換しようとしましたが、日付コンポーネントが追加されました。私もchronパッケージを試しましたが、時間オブジェクトで数値を分けることはできません

私がしたいことの一つは、この時間を使って平均速度を計算することです、私は距離を分けることができる必要があります時間によって

+3

秒以下にそれを変換します。時間と分の表現は実際にはプレゼンテーションのためのものです。 –

+0

'lubridate'パッケージは、日付の操作に役立ちます。 Journal of Statistical Softwareに掲載されている「日付と時刻を簡単に作成する」というパッケージのPDFを掲載しています。クイック検索でそれが表示されます。 – rrs

答えて

5

パッケージchronには時間を扱うクラスがあり、使用する関数は、times()です。ここでは、標準的なマラソンを実行するための標準的な時間を使った例です:

library(chron) 
tms <- c("2:06:00", "3:34:30", "4:12:59") 
x <- times(tms) 

あなたが今日の端数を表し、timesオブジェクトを持っています。

str(x) 
Class 'times' atomic [1:3] 0.0875 0.149 0.1757 
    ..- attr(*, "format")= chr "h:m:s" 

あなたはスピードの計算を実行することができますが、as.numericで数値にdatesからクラスを変換する必要があります。

dist <- 42.2 
as.numeric(dist/x/24) 
[1] 20.09524 11.80420 10.00856 

あなたはそれを持っています:速度はkm/hです。

5

私はPOSIXctを使用します。これは、ベースRとアドオンパッケージで最も強力なサポートを得ています。

1日内のデータを使用して、その日が問題ではない場合は、今年の1月1日の基準日を追加します。すべての比較、相違などについて、これは洗い流される。

POSIXctas.numeric()の変数は、算術演算と(datetimeのないDBに)格納する必要がある場合の両方で便利な(エポックからの秒秒の)通常の数値に戻ります。別のシステムまたは言語に転送します。エポックが簡単なので、誰もが浮動小数点数と分数秒を持っています。 POSIXctは、あなたが、シーケンスをフォーマットするための利点を追加できます違い、プロット、...ここで

は少し例です:あなたが見ているのは何

R> txt <- c("08:09:10", "09:10:11", "10:11:12", "11:12:13") 
R> times <- as.POSIXct(paste("2013-01-01", txt)) 
R> times 
[1] "2013-01-01 08:09:10 CST" "2013-01-01 09:10:11 CST" 
+ "2013-01-01 10:11:12 CST" "2013-01-01 11:12:13 CST" 
R> times - times[1] 
Time differences in secs 
[1]  0 3661 7322 10983 
attr(,"tzone") 
[1] "" 
R> as.numeric(times - times[1]) 
[1]  0 3661 7322 10983 
R> 
3

は本当に時間が、経過時間ではありません。経過時間のデータ型があります。ベースRでは、difftimeクラスがこれを行います。あなたは、数値に変換することによって、同様にこので数学を行うことができます

> ta 
Time differences in hours 
[1] 2.100000 3.575000 4.216389 8.152778 9.169722 10.186667 11.203611 
attr(,"tzone") 
[1] "" 
> format(ta) 
[1] " 2.100000 hours" " 3.575000 hours" " 4.216389 hours" " 8.152778 hours" " 9.169722 hours" 
[6] "10.186667 hours" "11.203611 hours" 

として表示さ

tms <- c("2:06:00", "3:34:30", "4:12:59", "08:09:10", 
     "09:10:11", "10:11:12", "11:12:13") 

ta <- as.difftime(tms) 

> 42.2/as.numeric(ta) 
[1] 20.095238 11.804196 10.008564 5.176150 4.602102 4.142670 3.766643 

lubridateパッケージには、経過時間に対処種類、特にdurationを持っています。

> ti 
[1] 7560s (~2.1 hours) 12870s (~3.58 hours) 15179s (~4.22 hours) 29350s (~8.15 hours) 
[5] 33011s (~9.17 hours) 36672s (~10.19 hours) 40333s (~11.2 hours) 

として表示され、あなたが数学を行うことができます

library("lubridate") 
ti <- as.duration(as.difftime(tms)) 

は(ここでは、むしろ時間よりも秒)を数値に変換した後で

> 42.2/as.numeric(ti) 
[1] 0.005582011 0.003278943 0.002780157 0.001437819 0.001278362 0.001150742 0.001046290 
関連する問題