lesson: 1 lubridateパッケージ

1.1 lubridateパッケージとは

lubridateパッケージとは、日時データの処理に特化したパッケージです。いわゆるtidyverseパッケージ群に含まれます。

(lubridateパッケージの特徴)

1.2 インストールと読み込み

インストールは以下の方法で可能です:

# CRAN版
install.packages("lubridate")
# GitHub版
remotes::install_github("tidyverse/lubridate")
# githubinstallからでもOK
githubinstall::githubinstall("lubridate")

パッケージの読み込みもいつも通りです:

library(lubridate)
 #>  
 #>  Attaching package: 'lubridate'
 #>  The following object is masked from 'package:base':
 #>  
 #>      date

1.3 日付や時刻の処理

このlubridateは非常に様々な機能を提供します。まずは日付や時刻のparseについて見てみましょう。

1.3.1 日付データ

データセットを読み込んだ時、日付を表す変数が文字列として処理されるのはよくある話です。Rはこの文字列として表現されている文字列を日付型に変換する方法はいくつかありますが、lubridateはymd()といった関数でシンプルに変換します:

ymd("2018-02-24")
 #>  [1] "2018-02-24"

このymd()は、Year, Month, Dayの頭文字で非常に直感的です。この例だと、この形式でしか対応していないように見えます。ですがこの関数はだいたいそれっぽい文字列だったらperseしてしまうという強さがあります。?ymdにある例を使って示します:

x <- c(20090101, "2009-01-02", "2009 01 03", "2009-1-4",
       "2009-1, 5", "Created on 2009 1 6", "200901 !!! 07")
ymd(x)
 #>  [1] "2009-01-01" "2009-01-02" "2009-01-03" "2009-01-04" "2009-01-05"
 #>  [6] "2009-01-06" "2009-01-07"

parseできるかどうかの目安として、“年”, “月”, “日”にできそうな数値要素があり、それが弁別できそうな場合です。なので“月”と“日”だけだとうまくいきません。うまくいかないパターンについては?ymdのドキュメントを参照してください。

また、年月日の並びでなくてもparseしてくれる関数が準備されています:

dmy(010210)
 #>  [1] "2010-02-01"
mdy(010210)
 #>  [1] "2010-01-02"

このような感じで“y”,“m”,“d”を並び替えれば思う通りにできるでしょう。

1.3.2 時刻データ

時刻データについても、日付のparse関数と同じように準備されています:

hms("10:20:30")
 #>  [1] "10H 20M 30S"

考え方はymd()と同様なので省略しますが、一度?hmsを読んでください。

1.3.3 日付&時刻データ

両方を合わせたデータにしたい場合は、以下のようにします:

ymd_hms("2018-2-24 15:30:15")
 #>  [1] "2018-02-24 15:30:15 UTC"

このymd_hms()POSIXct形式の日付ー時刻データオブジェクトを返します。つまり1970-01-01が基準になります。また、タイムゾーンはUTCがデフォルトとなります。タイムゾーンを指定したい場合はtz=オプションで指定します:

ymd_hms("2018-2-24 15:30:15", tz="Asia/Tokyo")
 #>  [1] "2018-02-24 15:30:15 JST"

1.3.4 柔軟なフォーマットに対応するには

よくある形ではなく、かなり独自なフォーマットで日時データを作成している場合もあるでしょう。そのような時にはparse_date_time()などを使うとできます。詳細は省略しますが、ymd_hms()などでうまく行かない問は?parse_date_time()をチェックしてみて試してみてください。従来のR関数群で処理するよりもうまくいけるでしょう。

1.4 参照

Parse dates with year, month, and day components

ymd()など日付データparserの解説

Parse periods with hour, minute, and second components

hms()など時刻データparserの解説

Parse date-times with year, month, and day, hour, minute, and second components.

ymd_hmsなど日時データparserの解説

User friendly date-time parsing functions

parse_date_time()など柔軟な日時データフォーマットに対応する関数の解説