Rで24時間以上の時間を換算したいです。
たとえば、[HH:MM] のような時間と分を含むデータフレームがあります。
[1] 「111:15」「221:15」「111:15」「221:15」「42:05」
次のように時間単位で変換したい:
「111.25」「221.25」「111.25」「221.25」「42.08333333」
as.POSIXct()
機能は一般的な目的で機能しますが、24 時間以上は機能しません。
文字列を正規表現で解析するだけです。の前のビットをつかみ、60 で割った:
後のビットを追加します。:
> foo = c("111:15", "221:15", "111:15", "221:15", "42:05")
> foo
[1] "111:15" "221:15" "111:15" "221:15" "42:05"
> as.numeric(gsub("([^:]+).*", "\\1", foo)) + as.numeric(gsub(".*:([0-9]{2})$", "\\1", foo))/60
[1] 111.25000 221.25000 111.25000 221.25000 42.08333
もう 1 つの可能性は、次のようなベクトル化された関数です。
FUN <- function(time){
hours <- sapply(time,FUN=function(x) as.numeric(strsplit(x,split=":")[[1]][1]))
minutes <- sapply(time,FUN=function(x) as.numeric(strsplit(x,split=":")[[1]][2]))
result <- hours+(minutes/60)
return(as.numeric(result))
}
時間と分を抽出するために使用する場所でstrsplit
、分を 60 で割った後に合計を取ります。
その後、次のように関数を使用できます。
FUN(c("111:15","221:15","111:15","221:15","42:05"))
[1] 111.25000 221.25000 111.25000 221.25000 42.08333