R×lubridate::dmy 日月年の順に並んでいる文字列または数値を日付型に変換する

R言語のlubridateパッケージに含まれているdmy()関数について解説します。この関数は、「海外基準の『日・月・年』の順で書かれた、時刻なしの『純粋な日付』を日時型に変えたい」ときに使える関数です。この関数は、「日(Day)→ 月(Month)→ 年(Year)」の順番で並んでいるテキストや数値を、自動で日付オブジェクト(Date型)に変換する関数です。dmy()を使用する利点は、01-01-2000や1日1月2000年などの区切りの仕方の差異や、月が英語表記なども、おおよそ正しく認識できることです。下記の具体例を参照ください。

lubridateパッケージは、日付と時間データを操作するための強力で便利な関数を多く取り扱っています。また、Rのデータサイエンス向け主要パッケージ群であるtidyverseパッケージにも含まれています。

概要

dmy()は、日月年の順に並んでいる文字列または数値を日付型に変換するための関数です。dmy()は、文字ベクトルと数値ベクトルに格納されている日付をDateまたはPOSIXctオブジェクトに変換します。これらの関数は、任意の非数字区切り記号と区切り記号なしを認識します。形式の順序が正しい限り、入力ベクトルに異なる形式の日付が含まれている場合でも、これらの関数は日付を正しく解析します。

使い方


dmy(
  ...,
  quiet = FALSE,
  tz = NULL,
  locale = Sys.getlocale("LC_TIME"),
  truncated = 0
)

引数

日付としている文字または数値ベクトルを指定します。

quiet = FALSE

TRUEの場合、関数は通常のメッセージを表示せずに評価されます。

tz = NULL

タイムゾーンインジケーターを指定します。
NULL(デフォルト)の場合、Dateオブジェクトが返されます。それ以外の場合は、タイムゾーン属性がtzに設定されたPOSIXctが返されます。

locale = Sys.getlocale(“LC_TIME”)

ロケールを指定します。

truncated = 0

切り捨てられる形式の数を整数で指定します。

戻り値

tz引数がNULLでない場合はPOSIXctクラスのベクトル、tzNULLの場合はDate(デフォルト)を返します。

使用例

準備

あらかじめ、tidyverseパッケージまたはlubridateパッケージを読み込んでおきます。


# library(tidyverse)でもよい
library(lubridate)

日月年の順に並んでいる文字列をdate型に変換する

日月年の順に並んでいる文字列をdate型に変換するには次のようにします。


dmy(c("01-01-2000", "02/Jan/2000", "03.01.2000", "04012000", "5-1-00", "6日1月2000年"))

[1] "2000-01-01" "2000-01-02" "2000-01-03" "2000-01-04" "2000-01-05" "2000-01-06"

日月年の順に並んでいる文字列をPOSIXctオブジェクトに変換する

日月年の順に並んでいる文字列をタイムゾーン日本標準時としたPOSIXctオブジェクトに変換するには次のようにします。


dmy(c("01-01-2000", "02/Jan/2000", "03.01.2000", "04012000", "5-1-00", "6日1月2000年"), tz = "Asia/Tokyo")

[1] "2000-01-01 JST" "2000-01-02 JST" "2000-01-03 JST" "2000-01-04 JST" "2000-01-05 JST" "2000-01-06 JST"

日月年の順に並んでいる数値をdate型に変換する

日月年の順に並んでいる数値をdate型に変換するには次のようにします。


dmy(c(1012000, 20100))

[1] "2000-01-01" "2000-01-02"

日月年の順に並んでいる数値をPOSIXctオブジェクトに変換する

日月年の順に並んでいる数値をタイムゾーン日本標準時としたPOSIXctオブジェクトに変換するには次のようにします。


dmy(c(1012000, 20100), tz = "Asia/Tokyo")

[1] "2000-01-01 JST" "2000-01-02 JST"

参考文献