2

時間 (0 から 24) と分 (0 から 59) として記録された時間を表すこのベクトルがあります。difftime のような関数を使用できるように、R で %H:%M 時刻形式に変換したいと思います。

str(SF5$ES_TIME)
 int [1:11452] 1940 600 5 1455 1443 2248 1115 900 200 420 ...

これは私が試したものですが、どちらの場合もエラーが発生しました:

>SF5$time1<-as.POSIXct(SF5$ES_TIME, format = "%H:%M",tz="EST")
Error in as.POSIXct.numeric(SF5$ES_TIME, format = "%H:%M", tz = "EST") : 
  'origin' must be supplied
SF5$time1<-as.POSIXct(as.character(SF5$ES_TIME), format="%H:%M",tz="")
> str(SF5$time1)
POSIXct[1:11452], format: NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA ...

ヘルプや読書の提案は大歓迎です! ありがとう、オーレリー

4

2 に答える 2

3

さて、エラーメッセージは提供するように指示しorigin、1 分は 60 秒なので、次のようになります。

SF5 <- list(ES_TIME=as.integer(c(1940,600,5,1455,1443,2248,1115,900,200,420)))

x <- as.POSIXct(SF5$ES_TIME*60, origin="1970-01-01")
format(x, format="%H:%M")
#[1] "08:20" "10:00" "00:05" "00:15" "00:03" "13:28" "18:35" "15:00" "03:20" "07:00"

POSIXct日付は単なる数字 (クラスを含む) であるため、必要にformat応じて印刷する呼び出しが必要であることに注意してください。 のデフォルトの印刷でxは、完全な日付情報 (年/月/日など) が印刷されます。

...あなたはそれを気にしないので、どんな起源の日付でも構いません1970-01-01が、通常の起源です...

于 2012-04-04T18:29:22.340 に答える
0

コードを解読できました!ヒントをありがとうございました!

#1) as suggested by Justin : put all numbers into four digits with zero padding
    SF5$ES_TIME2<-sprintf("%04d",SF5$ES_TIME) 
#2) Matched these %H%M with their corresponding date %y-%m-%d
    SF5$ES.datetime <- paste(SF5$ES_TIME2,SF5$ES_DATE,sep=" ")
#3) Transform into Date-Time format
    SF5$ES.datetime2 <- as.POSIXct(SF5$ES.datetime,format="%H%M %y-%m-%d", tz="")

# Did the same for my other time-date of interest
SF5$SH_TIME2<-sprintf("%04d",SF5$SH_TIME) 
SF5$SH.datetime <- paste(SF5$SH_TIME2,SF5$SH_DATE,sep=" ")
SF5$SH.datetime2 <- as.POSIXct(SF5$SH.datetime,format="%H%M %y-%m-%d", tz="")

# Calculate the time difference between the 2 date-time in hours
SF5$duration<-difftime(SF5$SH.datetime2,SF5$ES.datetime2,units="hours",tz="")
于 2012-04-05T16:32:11.630 に答える