R言語

R言語 日付・時間 DateクラスとPOSIXクラス

  1. HOME >
  2. R言語 >

R言語 日付・時間 DateクラスとPOSIXクラス

スポンサーリンク

R言語の日付と時間に関してよく使うテクニックをまとめました。

Rに標準でインストールされているパッケージbaseの中のDateクラスとPOSIXクラスの操作方法について解説していきます。

日付や時間からhour, min, secなどを抽出する例やシリアル値から対応する日付または時間に変換する例をみていきます。

今回扱うプログラミングコードは以下のファイルにまとめています。

統計学初学者向けの教材です
¥2,970 (2022/06/01 17:41時点 | Amazon調べ)
\楽天ポイント5倍セール!/
楽天市場
\ポイント5%還元!/
PayPayモール
RStudioで解析したい方へ
¥3,278 (2022/06/02 22:52時点 | Amazon調べ)
\楽天ポイント5倍セール!/
楽天市場
\ポイント5%還元!/
PayPayモール

日付・Dateクラス

まずは日付の操作に用いられるDateクラスについてみていきます。

"2021-12-5"のような日付を表す文字列のフォーマットを変えて"2021年12月-5日"にしたり、2021年12月を抽出するときに、Dateクラスを用います。

関数Sys.Dateを使うと、実行したときの日付を取得することができます。関数strを用いてクラスを確認するとDateクラスであることが分かります。

余談ですが、関数julianでDateクラスオブジェクトのorigin(基準日)を参照することができます。1970年1月1日基準から18966日後(シリアル値)であり、基準日が変わるとこの値も変わってきます。

年月日の抽出

Dateクラスから年月日を抽出するための便利なパッケージがありますが、ここでは標準の環境で取り出す例を紹介します。

関数monthsweekdaysでそれぞれ月と曜日を取得することが可能です。

また、Dateクラスオブジェクトを時間・POSIXct, POSIXltクラスで紹介するPOSIXltクラスに変換することで、月と曜日だけでなく年・月・日などの情報を全て抽出することができます。

注意として、一部の値はoriginからのずれとなっているため、1だけずれていたりします(12月ですが、monを参照すると11が返ってきます)。

フォーマットの変換

次に、Dateクラスのフォーマットの変換について解説します。最初に述べたように"2021/12/5"などのデータを"2021年12月05日""12-05-2021"に変換したいときがあると思いますが、関数format.Dateを用いることで次のように簡単に変換することができます。

また、localeを変更することで月や曜日を英語に変更することもできます。

localeを元の日本語に戻すには、以下を実行してください。

文字列からDateクラスに変換する際は、対応するフォーマットの記号を引数formatに並べればおkです。

以下にDateクラスで用いるフォーマットの記号をまとめておきます。

Dateクラスのフォーマット
%d
%m月(数字)
%b月(文字列 省略)
%B月(文字列)
%y年(2桁)
%Y年(4桁)

日付の生成

日付を生成したいときは関数seq.Dateを用いると便利です。

関数seqで連続する数値を生成できたように、連続する日付を生成することができます。

また、数値のときと同様に 関数sampleでランダムな日付を取得することもできます。

Dateクラスの演算

Dateクラスの演算を紹介します。Dateクラスに差の演算「-」を適用し日付の差を計算することができます。何日後であるかを計算するときに重宝します。

昨日の日付yeseterdayと今日の日付todayの差は以下のように計算できます。

シリアル値から日付への変換

最後に、シリアル値から日付に戻す例を紹介します。

関数as.Dateの引数のoriginをシリアル値に対応する基準日に設定することで、元の日付を取得することができます。

¥3,509 (2022/06/11 02:16時点 | Amazon調べ)
\楽天ポイント5倍セール!/
楽天市場
\ポイント5%還元!/
Yahooショッピング
¥4,036 (2022/06/11 02:41時点 | Amazon調べ)
\楽天ポイント5倍セール!/
楽天市場
\ポイント5%還元!/
PayPayモール

時間・POSIXct, POSIXltクラス

続いて、POSIXct及びPOSIXltPOSIXct及びPOSIXltクラスについてみていきます。

POSIXctとPOSIXltクラスは時間に関するクラスであり、前述したDateクラスに時・分・秒などのより細かいオブジェクトが追加されたクラスとなります。

POSIXct及びPOSIXlt基本的にDateクラスと使い方はおんなじで、Dateクラスの操作で用いたほとんどの関数がそのまま適用できます。

シリアル値からの変換

まず、シリアル値から時間に変換する方法を紹介します。POSIXクラスの場合、origin(基準時間)からの秒数がシリアル値となります。

optionsでdigitsを11に変更しているのは、デフォルト(digits = 7)だと1636363849.6の小数点以下が丸められてしまうためです。

年月日時分秒の抽出

POSIXクラスから年月日時分秒を抽出するには、POSIXltクラスを用います。POSIXltクラスはPOSIXctとは違い、年月日時分秒などのオブジェクトから成るリストであり、以下のように年月日時分秒を抽出することが可能です。

フォーマットの変換

POSIXクラスのフォーマットの変換はDateと同様に、format.POSIXを用いることでできます。

Dateクラスと同様に、formatを指定してすることで任意の時間を表す文字列をPOSIXクラスに変換することができます。

POSIXクラスのフォーマットで用いる記号は以下の通りです。

Dateクラスのフォーマット
%a曜日(省略)%A曜日
%b月(文字列 省略)%B月(文字列)
%cローカルの日付と時間%d日付
%H時(24時間表記)%I時(12時間表記)
%j1年で何日目か%m月(数字)
%M%pローカルのam, pm
%S%U1年で何週目か(日曜から)
%w曜日(数字、日曜から)%W1年で何週目か(月曜から)
%xローカルの日付%Xローカルの時間
%y年(2桁)%Y年(4桁)
%zGMTからのずれ%Zタイムゾーン

POSIXクラスの演算

Dateクラスと同様にPOSIXクラスは差の演算を行うことが可能です。次のようにして時間の差を計算できます。

時間の生成

seq.POSIXで時間のシークエンスを生成することができます。引数byで1秒ごと、1分ごと、1時間ごとなど指定することができます。以下、実行例です。

ランダムな時間を生成したいときは、関数sampleを用います。時間を含むベクトルをsampleに適用することで、ランダムに時間を取得することができます。

まとめ

DateクラスとPOSIXクラスの基本的な扱い方をまとめました。

文字列や数値(シリアル値)からDatePOSIXクラスに変換することで、時間を表すオブジェクトの操作が簡単になります。

スポンサーリンク

  • この記事を書いた人
  • 最新記事

usagi-san

統計学とゲームとかをメインに解説していくよ。 数式とかプログラミングコードにミスがあったり質問があったりする場合はコメントで受け付けます。すぐに対応します。

-R言語
-,

© 2022 ウサギさんの統計学サロン Powered by AFFINGER5