2014年12月27日土曜日

Rで文字列を日付時刻型に変換する

日付時刻と観測値が対応付いたデータってありますよね。例えば、原子力規制委員会が公開している放射線モニタリング情報だと下記のようなCSV形式で、測定時刻と測定値が対応付いています。


                V5,      V6
  2014/12/26 23:50,   0.033
  2014/12/26 23:40,   0.034
  2014/12/26 23:30,   0.033
  ................,   .....


こういうデータを見ると、V5を横軸、V6を縦軸にして時系列グラフを描きたくなりますよね。でも、V5が文字列型で読み込まれていると、そのままplotのx軸に指定してもうまくいきません。

日付や時刻を表現する型に変換してやる必要があります。

上記のような書式(日付がスラッシュ、時刻がコロン)ならば、POSIXlt関数に引数で渡すだけで、簡単に変換することができます。

  > as.POSIXlt("2014/12/26 23:50")

  [1] "2014-12-26 23:50:00 JST"

まとめて処理するなら、↓こんな感じでしょうか。

  d$日付時刻 <- as.POSIXlt(d$V5)


文字列が標準の書式に従っていれば、上記のように簡単です。

では、文字列が独自の書式で書かれている場合はどうでしょうか。例えば、日付時刻の情報が「2014年12月27日 00時00分」のような書式で入っているとします。このような場合は、strptimeを使うと便利です。

  > strptime("2014年12月27日 00時00分", "%Y年%m月%d日 %H時%S分")

  [1] "2014-12-27 JST"

%Y: 4桁の西暦
%m: 2桁の月
%d: 2桁の日
%H: 2桁の時
%M:  2桁の分

となっているので、それぞれの要素が文字列のどこに登場しているかを第2引数で指定しているわけですね。

「パーセントほにゃらら」として何が指定できるかは、ヘルプに書かれています。コマンドプロンプトに「?strptime」と打てば確認できます。

as.POSIXltやstrptimeをつかって日付時刻型に変換してしまえば、plotに指定することで、時系列のグラフを描けるようになります。■

[2015年1月2日追記]
実際のデータの時系列プロットで使ってみたサンプルです↓
Rで放射線モニタリング情報を時系列プロットする - Rプログラミングの小ネタ




2 件のコメント:

  1. %S: 2桁の分
    は、
    %M: 2桁の分
    の間違いではないでしょうか?

    返信削除
  2. 管理人です。コメントありがとうございます。
    まさに、ご指摘の通りです。
    SはSeconds(秒)で、MがMinutes(分)ですもんね・・・。
    本文は修正しておきました。

    返信削除