4

私は単純なデータフレームを持っています。そこから、時間 (24 時間制の時間と分) を記録する別の列を追加したいと考えています。次に、この列を変数に対してグラフ化します。日付はすべて同じなので、私は時間だけに興味があります。これは私がこれまでに試したことです。

a <- c(1:6)
b <- c("05/12/2012 05:00","05/12/2012 06:55","05/12/2012 07:10",
       "05/12/2012 10:23", "05/12/2012 11:43","05/12/2012 13:04")
c <-c("0","0","0","1","1","1")
df1 <- data.frame(a,b,c,stringsAsFactors = FALSE)

a <- df1$a
b <- strptime(df1$b, "%d/%m/%Y %H:%M")
c <- as.numeric(df1$c)
hour <- as.numeric(format(b, "%H"))
min <- as.numeric(format(b, "%M"))
date <- format(b, "%x")
time <- hour + min

df2 <- data.frame(a, b, c, hour, min, date, time)

ここでは、数値を分解し、同様の単位に変換してから追加することにより、分と時間を手動で変換するようにアドバイスされました. ただし、午前5時が単に5としてインポートされるため、苦労しています。

誰かが私にこれを適切に行う方法を教えてくれたら、とても感謝しています.

4

1 に答える 1

5

日付と時刻の変換ツールは数多くあり、使用するパッケージ全体のセットもあります。POSIXltリストから情報を抽出するだけで、必要な情報を抽出できるので、この場合の作業が好きです。

例えば:

a <- c(1:6)
b <- c("05/12/2012 05:00","05/12/2012 06:55","05/12/2012 07:10",
       "05/12/2012 10:23", "05/12/2012 11:43","05/12/2012 13:04")
c <-c("0","0","0","1","1","1")
df1 <- data.frame(a,b,c,stringsAsFactors = FALSE)

df2 <- within(df1,{
  posb <- as.POSIXlt(b,format="%d/%m/%Y %H:%M")
  hours <- posb$hour
  mins <- posb$min
  dates <- format(posb, "%x")
  time <- format(posb, "%H:%M")
  posb <- NULL  # cleanup
})

与える:

> df2
  a                b c  time     dates mins hours
1 1 05/12/2012 05:00 0 05:00 12/5/2012    0     5
2 2 05/12/2012 06:55 0 06:55 12/5/2012   55     6
3 3 05/12/2012 07:10 0 07:10 12/5/2012   10     7
4 4 05/12/2012 10:23 1 10:23 12/5/2012   23    10
5 5 05/12/2012 11:43 1 11:43 12/5/2012   43    11
6 6 05/12/2012 13:04 1 13:04 12/5/2012    4    13

詳細については、以下も参照してください。

  • ?POSIXltPOSIXt クラスの詳細については、
  • ?format書式設定オプションの詳細については
  • ?strptime書式設定オプションと文字への変換の詳細については、
  • 代替機能のlubridateパッケージ
  • さらに多くの代替機能のtimeDateパッケージ
  • ...
于 2013-02-08T15:09:46.387 に答える