月を扱うときの落とし穴
ymd("2018-01-31") + months(1) は何を返すべきでしょうか? 30日後、31日後、それとも28日後? 試してみましょう。一般に、lubridate は次の月の同じ「日付」(月内の日)を返しますが、2月31日は存在しないため、lubridate は欠損値 NA を返します。
別の加算・減算演算子 %m+% と %m-% は異なる挙動をします。存在しない日付に対して NA を返す代わりに、存在する最後の日付までロールバックします。
今年の各月の最終日を並べるシーケンスを作ることで、その挙動を確かめましょう。
この演習はコースの一部です
Rで扱う日付と時刻
演習の手順
今年の1月31日を表す日付 jan_31 をワークスペースに用意してあります。
- 1か月の期間を1から12までのシーケンスとして作成してください。
month_seqをjan_31に加えてみましょう。31日が存在しない月で何が起きるかに注目してください- 次に
%m+%演算子を使って、month_seqをjan_31に加えてみましょう。 %m-%演算子を使って、month_seqをjan_31から引くことも試してください。
実践的なインタラクティブ演習
このサンプルコードを完成させて、この演習に挑戦してみましょう。
# A sequence of 1 to 12 periods of 1 month
month_seq <- ___
# Add 1 to 12 months to jan_31
___ + ___
# Replace + with %m+%
___ ___ ___
# Replace + with %m-%
___ ___ ___