0

データベースに時間列があり、時間と分が「:」で区切られています。「:」を削除して、計算に数値時間を使用するため、時間フィールドが数値になるようにします。

入力: X 00:00 01:15 02:30

出力: X 0000 0115 0230

R は初めてです。ばかげた質問でしたら申し訳ありません。どんな助けでも大歓迎です。ありがとうございました。

4

3 に答える 3

3
> x <- c("00:00", "01:15", "02:30")
> gsub(":", "", x)
[1] "0000" "0115" "0230"

本当に数値が必要な場合は、numericまたはに強制することができますinteger

> as.numeric(gsub(":", "", x))
[1]   0 115 230
于 2013-08-05T17:17:08.003 に答える
2

GSeeの答えはあなたが求めることをします。ただし、時間の単位で計算を行っている場合は、もっと簡単な方法を考えるかもしれません。

library(lubridate)
X <- hm(c("00:00", "01:15", "02:30")) # Converts to lubridate time objects

X + minutes(1)
# [1] "1M 0S"     "1H 16M 0S" "2H 31M 0S"

X + weeks(2)
# [1] "14d 0H 0M 0S"  "14d 1H 15M 0S" "14d 2H 30M 0S"
于 2013-08-05T17:31:56.023 に答える
2

R 機能を使用して時刻を解析し、最初に日付/時刻に変換する方が賢明な場合があります。現時点では、「時間」値の非 10 進文字をキャプチャする方法はありません。300-259 は 41 ではなく 1 である必要があります。この一連のコマンドは、R の日時および日付関数の一部を示しています。

> X <- c('00:00', '01:15', '02:30')
> as.POSIXct(X, format="%H:%M")
[1] "2013-08-05 00:00:00 PDT" "2013-08-05 01:15:00 PDT" "2013-08-05 02:30:00 PDT"

これにより、今日の真夜中からの秒単位の差で結果が得られます。

> as.numeric(as.POSIXct(X, format="%H:%M") - as.POSIXct("2013-08-05 00:00:00 PDT"))
[1]    0 4500 9000

ここで、今日の日付を使用してみますが、as.POSIXct はこれが GMT.UCT 時間であると想定するため、7 時間のオフセットがあることに注意してください。

> as.numeric(as.POSIXct(X, format="%H:%M") - as.POSIXct(Sys.Date()))
[1] 7.00 8.25 9.50
> as.numeric(as.POSIXct(X, format="%H:%M") - (as.POSIXct(Sys.Date())+7*3600))
[1]    0 4500 9000

したがって、7 時間 (=7*3600 秒) をシフトしてから分に変換して、プロセスを終了します。

> as.numeric(as.POSIXct(X, format="%H:%M") - (as.POSIXct(Sys.Date())+7*3600))/60
[1]   0  75 150
于 2013-08-05T18:02:44.050 に答える