始める無料で始める

月を扱うときの落とし穴

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_seqjan_31 に加えてみましょう。31日が存在しない月で何が起きるかに注目してください
  • 次に %m+% 演算子を使って、month_seqjan_31 に加えてみましょう。
  • %m-% 演算子を使って、month_seqjan_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-%
___ ___ ___
コードを編集して実行