自転車レースの結果を分析して R を学習していますが、時間データ (人がレースを完走するのにかかった時間) に問題があります。
時刻データの形式は「HH:MM:SS」です。
posixct に変換しようとしましたが、日付コンポーネントが追加されます。chron パッケージも試しましたが、数値を時間オブジェクトで割ることができません
私がやりたいことの 1 つは、この時間を使用して平均速度を計算することです。そのため、距離を時間で割ることができる必要があります。
自転車レースの結果を分析して R を学習していますが、時間データ (人がレースを完走するのにかかった時間) に問題があります。
時刻データの形式は「HH:MM:SS」です。
posixct に変換しようとしましたが、日付コンポーネントが追加されます。chron パッケージも試しましたが、数値を時間オブジェクトで割ることができません
私がやりたいことの 1 つは、この時間を使用して平均速度を計算することです。そのため、距離を時間で割ることができる必要があります。
あなたが見ているのは実際には時間ではなく、経過時間です。経過時間にはデータ型があります。ベースRでは、difftime
クラスがこれを行います。
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)
として表示されます
> 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"
数値に変換することで、これでも数学を行うことができます。
> 42.2/as.numeric(ta)
[1] 20.095238 11.804196 10.008564 5.176150 4.602102 4.142670 3.766643
パッケージにはlubridate
、特に経過時間を処理するタイプもありますduration
。
library("lubridate")
ti <- as.duration(as.difftime(tms))
として表示されます
> 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)
数値に変換した後、isで数学を行うことができます(ここでは、時間ではなく秒)
> 42.2/as.numeric(ti)
[1] 0.005582011 0.003278943 0.002780157 0.001437819 0.001278362 0.001150742 0.001046290
パッケージchron
には時間を処理するクラスがあり、使用する関数は、それを待つ、times()
. 標準的なマラソンを実行するための典型的な時間を使用した例を次に示します。
library(chron)
tms <- c("2:06:00", "3:34:30", "4:12:59")
x <- times(tms)
これtimes
で、1 日の分数を表すオブジェクトができました。
str(x)
Class 'times' atomic [1:3] 0.0875 0.149 0.1757
..- attr(*, "format")= chr "h:m:s"
dates
速度計算を実行できますが、クラスをから数値に変換する必要がありますas.numeric
。
dist <- 42.2
as.numeric(dist/x/24)
[1] 20.09524 11.80420 10.00856
速度は km/h です。
POSIXct
ベース R とアドオン パッケージで圧倒的に強力なサポートがあるものを使用します。
日を問わない日内データを使用するときはいつでも、たとえば今年の 1 月 1 日の基準日を追加するだけです。すべての比較、違いなどについて、これは洗い流されます。
また、注意してください: 変数as.numeric()
のPOSIXct
通常の数値(エポックからの秒数.サブ秒数)に戻ります。これは、算術演算と(日時のないデータベースに)保存する必要がある場合、または別のシステムまたは言語に転送する必要がある場合に便利です。 . エポックは簡単なので、誰もが浮動小数点数と (分数) 秒を持っています。 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>