DISTRICT 37

なにか

POSIXあれこれ

Rで時系列データを扱うことになったのだけど、日付型の扱いを何度も調べているのでメモ。

POSIXct

所謂プログラミング言語では日付はdateというクラスで扱われる。Rでももちろんそうなのだけど、POSIXctという聞きなれない型を使う。だけどこれはこれで結構便利。

unixtimeからPOSIXへ変換

取ったデータの日付および時刻はunixtimeになってたので、人間にわかりやすく変換する必要がある。unixtimeは特に形とかではなくただの数値。javaとかでとれるSystem.currenTimeMills()で返されるシステム日付の数値もこれ。これをまずPOSIXctというクラスにすると扱いやすくなる。

日付を扱う基本のきとして現在時刻のPOSIXctをとるにはSys.time()を使えば一発。

Sys.time()

[1] "2016-04-07 11:15:00"

同じように日付型としてdate()がある。ただしこちらの戻り値(というよりも文字列表現)は欧風。

date()

[1] "Thu Apr 7 11:15:00"

unixtimeからPOSIXctへの変換はas.POSIXctを使う。originを引数に渡すのをよく忘れる。デフォルト引数で"1970-01-01"にしてくれればいいのに。明示的に入れなければダメなのには何か理由があるんだろうな。

unixtime = 1459995330
as.POSIXct(unixtime, origin="1970-1-1")

[1] "2016-04-07 11:15:00 JST"

そののちにformatして人間がわかりやすい形にできる。

unixtime = 1459995330
format(as.POSIXct(unixtime, origin="1970-1-1"), foramt="%Y/%m/%d"))

[1] "2016/04/07"

formatで指定できるのは下記の表の通り。下記の表以外にもhelp(strptime)で使えるパラメータを確認できる。

パラメータ 内容
%Y 年(4ケタ)         
%y 年(2ケタ)              
%m 月(01-12)       
%d 日(01-31)
%H 時(00-23)
%M 分(00-59)
%S 秒(00-61)

Dateとか文字列とかからPOSIX

文字列からDate型にもPOSIXct型にも変換することもできる。もちろんunixtimeにも。

#文字列からPOSIXへ
as.POSIXct("2016-04-07 11:00")

[1] "2016-04-07 11:10:00 JST"

#文字列から日付へ
as.Date(as.POSIXct("2016-04-07 11:00"))

[1] "2016-04-07"

#文字列からunixtimeへ
as.numeric(as.POSIXct("2016-04-07 11:00"))

[1] 141574000

まとめ

わかったことはas.XXXXで何とかなるという事。それでやってみてどうしてもだめなら調べるというのがいいのかも。