Rで現在の日時を調べるにはつぎのようにする。
> Sys.time() [1] "2011-03-20 12:34:56 JST"
この形式がISOで決められた時間の表し方である。最後のJSTは日本標準時を表すが,自明なら "2011-03-20 12:34:56" のように省略してもよい。さらに秒が不要なら "2011-03-20 12:34" でよいし,日付だけでよければ "2011-03-20" でよい。
これらは文字列のように見えるが,内部表現は1970年元旦からの秒数で,POSIXct型という衣を着ている。衣(クラス)を剥がしてみれば,整数値が現れる。単に数値に変換しても同じ結果になる。
> unclass(Sys.time()) [1] 1300592096 > as.numeric(Sys.time()) [1] 1300592096
"2011-03-20 12:34:56" のような文字列からPOSIXct型の値に変換するには
> t = as.POSIXct("2011-03-20 12:34:56")
のようにすればよい。"2011-03-20" の代わりに "2011-3-20" でも "2011/3/20" でも解釈してくれる。別の方法として次のようにもできる。
> t = ISOdatetime(2011, 3, 20, 12, 34, 56)
POSIXct型は内部では秒単位の整数であるため,秒を加算することができる。例えば時刻 t を起点として10分ごと1時間の数列を作るには次のようにする(最後の 600 は "10 min" でもよい)。
> seq(t, t+3600, 600)
ここまでのまとめとして,簡単な時系列データのグラフを描いてみよう。文科省が都道府県別環境放射能水準調査結果で公開している福島第一原発の事故に伴う3月15日17-18時から1時間ごとの東京都新宿区で計測した放射線の量は次の通りである。
x = c(0.0941, 0.2, 0.361, 0.123, 0.0888, 0.0657, 0.0556)
このグラフは次のようにして描ける。
# par(family="HiraKakuProN-W3") # Macの場合だけ
par(mgp=c(2,0.8,0))
t0 = as.POSIXct("2011-03-15 17:00")
t = seq(t0, by=3600, along.with=x)
plot(t, x, type="o", pch=16, xlab="時刻", ylab="γ線(μSv/h)")
もっとデータを増やしてみよう。
x = c(0.0941, 0.2, 0.361, 0.123, 0.0888, 0.0657,
0.0556, 0.0538, 0.0547, 0.0672, 0.101, 0.141,
0.143, 0.142, 0.104, 0.0891, 0.069, 0.058,
0.057, 0.056, 0.055, 0.054, 0.054, 0.054)
これくらいになると,時間軸の目盛りが思うようにならない。目盛りを省略(xaxt="n")して,別に目盛りだけを描くほうがよい。
plot(t, x, type="o", pch=16, xlab="時刻", ylab="γ線(μSv/h)", xaxt="n") axis.POSIXct(1, at=t, format="%d日%H時")
目盛りを4時間ごとにしてみよう。
plot(t, x, type="o", pch=16, xlab="時刻", ylab="γ線(μSv/h)", xaxt="n") r = as.POSIXct(round(range(t), "hours")) axis.POSIXct(1, at=seq(r[1],r[2],by="4 hours"), format="%d日%H時")
このように,POSIXct型では sec(s),min(s),hour(s),day(s) という単位が使える。また,format の形式はRで strptime のヘルプを見れば出ている。よく使うものだけを挙げておく:
| %Y | 年(4桁) |
|---|---|
| %y | 年(2桁) |
| %m | 月(01-12) |
| %b | 月( 1-12←日本語環境では) |
| %d | 日(01-31) |
| %e | 日( 1-31) |
| %H | 時(00-23) |
| %M | 分(00-59) |
| %S | 秒(00-61) |
Last modified: 2011-03-31 14:35:30