こちらのノートでは、「2016/11/1 11:26:14」のように「秒」レベルの情報を持つ日付時間型のテキストと、「2016/1/1 0:05」のように「分」レベルまでの情報しか持たない日付時間型とテキストが混在する文字列型の列を、日付時間型の列に変換する方法を紹介します。
上記のようなデータを使って、時間ごとにユーザーのアクセス数を集計をしたいときには「アクセス日時」のデータ型をCharacter(文字列)型から、POSIXct(日付時間)型に変更する必要があります。
そのようなときには「データタイプを変換」の「Date(日付)/POSIXct(日付時間型)に変換」メニューからPOSIXct(日付時間)型にデータの型を変換できます。
しかし、例えば、「秒」レベルの情報を持つ文字列をPOSIXct(日付時間)型に変換する「Year, Month, Day, Hour, Minutes, Second」を選択すると、「分」までのレベルしか持たない値に「秒」のレベルの情報がないため、欠損値になってしまいます。
一方で、「分」レベルまでの情報しか持たない文字列をPOSIXct(日付時間)型に変換する「Year, Month, Day, Hour, Minutes」を選択すると、「秒」レベルの情報を持つ値が欠損値になってしまいます。
このようなデータが手元にあるときには、「秒」レベルの情報を持つ文字列をPOSIXct(日付時間)型に変換する「ymd_hms」関数の中で「truncated」という引数を利用することで、切り捨てられた(あるいは欠落している)日付時間の単位を考慮したうえで、日付時間型へのデータの変換が可能です。
「ymd_hms」関数を使いたいときには、「アクセス日時」の列ヘッダーメニューから「データタイプを変換」の「Date(日付)/POSIXct(日付時間型)に変換」メニューから「Year, Month, Day, Hour, Minutes, Second」を選択します。
すると以下のように、計算エディタ内でymd_hms関数を使った計算式を確認できます。
このまま実行をしてしまうと、「分」までのレベルしか持たない値が欠損値になってしまいます。
そこで、以下のように計算エディタにタイプし、実行します。
ymd_hms(アクセス日時, truncated=1)
このとき、「truncated」ではどれだけの情報の欠損を考慮して、データを変換するのかを指定します。
今回のようにtruncatedの引数に「1」を指定すると、ymd_hms関数における最小の単位である「秒」が切り捨てられた値を考慮したうえで、POSIXSct型への変換を行います。
仮に「時分秒」のが切り捨てられた値も考慮したうえで、POSIXSct型への変換を行いときにはtruncatedの引数に「3」を指定するわけです。
すると、以下のように「秒」のレベルの情報をもたない文字列もPOSIXct型に適切に変換でできます。