R言語で、日月年の順に並んでいる文字列または数値を日付型に変換する方法について解説します。時間に関する処理はtidyverseパッケージに含まれているlubridateパッケージを使うのがとても便利です。ここでは、lubridateパッケージのdmy()の使用方法についてお伝えします。

dmy()を使用する利点は、01-01-2000や1日1月2000年などの区切りの仕方の差異や、月が英語表記なども、おおよそ正しく認識できることです。下記の具体例を参照ください。

dmy()の概要

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

dmy()の使い方


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

dmy()の引数

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

quiet = FALSE

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

tz = NULL

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

locale = Sys.getlocale(“LC_TIME”)

ロケールを指定します。

truncated = 0

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

dmy()の戻り値

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

準備

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


library(tidyverse)

日月年の順に並んでいる文字列を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"
R×lubridate::dmy 日月年の順に並んでいる文字列または数値を日付型に変換する