Rにおける日付(Date型)のデフォルトの原点は1970年1月1日だぞっと
前振り
数値を日付に変換する時には基準となる日付が必要なわけですが、Rの場合、デフォルトだと「1970年1月1日」になってるようだ。
この話のモチベーションとしては別に俺的には日付のまま処理したいんだけど、lapplyの結果を行列にしたりデータフレームにしたりしてるといつの間にか日付が数値になってて、どうやって直そうかとアワアワするのをなくすことだ。
本題
例えば今日の日付をGETしておく
> today <- Sys.Date() > today [1] "2014-10-10"
そして、それを数値にしてみる。
> today_as_number <- as.numeric(today) > today_as_number [1] 16353
これを日付に戻そうとas.Date関数を噛ませると、originを指定してないと怒られる。
> as.Date(today_as_number) Error in as.Date.numeric(today_as_number) : 'origin' を指定しなければなりません
ここで、originとして1970年1月1日を指定すると元の日付に戻るので、これで正しそうだぞとわかる。
> as.Date(today_as_number, origin="1970-01-01") [1] "2014-10-10"
lubridate使えばこんなことにはならないのかなぁ。