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

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

ym()を使用した時の戻り値の日は1日になります。

ym()の概要

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

ym()の使い方


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

ym()の引数

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

quiet = FALSE

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

tz = NULL

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

locale = Sys.getlocale(“LC_TIME”)

ロケールを指定します。

truncated = 0

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

ym()の戻り値

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

準備

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


library(tidyverse)

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

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


ym(c("2000-01", "2001/Jan", "2002.01", "200301", "04-1", "2005年1月"))

[1] "2000-01-01" "2001-01-01" "2002-01-01" "2003-01-01" "2004-01-01" "2005-01-01"

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

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


ym(c("2000-01", "2001/Jan", "2002.01", "200301", "04-1", "2005年1月"), tz = "Asia/Tokyo")

[1] "2000-01-01 JST" "2001-01-01 JST" "2002-01-01 JST" "2003-01-01 JST" "2004-01-01 JST" "2005-01-01 JST"

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

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


ym(c(200001, 200101))

[1] "2000-01-01" "2001-01-01"

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

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


ym(c(200001, 200101), tz = "Asia/Tokyo")

[1] "2000-01-01 JST" "2001-01-01 JST"
R×lubridate::ym 年月の順に並んでいる文字列または数値を日付型に変換する