ごゆるり日和

元気でヤンチャな子を推してるDSの備忘録など

lubridateで1か月後を計算するには?

近況

めでたく大学院を修了しました. 現在,就職先でもRを使えるというありがたい環境で働かせていただいてます. 扱ってるデータに日付が含まれているのですが,その際にlubridateを重宝しています.

詳しいことはいろんな文献に載っているので本記事では業務中に役立ったことを備忘録として残します.

翌月の参照

まずは,ともあれlibraryの読み込みですね.

library(lubridate)
date <- lubridate::today()
#"2021-05-10"

ここで date + 1とすると翌日になります.

date + 1 
#"2021-05-11"

翌月にするためには次のようにします.

date + months(1) 
#"2021-06-10"

これがわからなかった...

months()のほかにもyears(), weeks()などがあり,これらをまとめてperiodと呼ばれています.

months(1) 
#"1m 0d 0H 0M 0S"
period(12,"month")
#"12m 0d 0H 0M 0S"
years(3)
#"3y 0m 0d 0H 0M 0S"
period(12,"year")
#12y 0m 0d 0H 0M 0S"
weeks(12)
#"84d 0H 0M 0S"

もっとはやく知りたかったですね.

やりたくなるよね閏年

こうなったらやりたくなるのは閏年の処理ですね.

leap_year <- ymd(20200229)
#"2020-02-29"
leap_year + years(1)
#NA
leap_year + years(2)
#NA
leap_year + years(3)
#NA
leap_year + years(4)
#"2024-02-29"

ちゃんとしてますね(某Dr.STONEの氷月)

話はちょっと飛びまして閏年にはルールがあります. みなさんがご存じの通り西暦を4で割り切れるときには閏年になります. しかし,4で割り切れかつ,100で割り切れかつ,400で割り切れないときは閏年にはなりません. 難しいですね. 下記に閏年の決定フローをはっつけときます.

f:id:Kodachan:20210510221041j:plain
閏年フロー

では,どうなっているでしょうか...

leap_test <- ymd(21000228)
#"2100-02-28"
leap_test + days(1)
#"2100-03-01"

見事"2100-02-29"は飛ばされましたね👏

まとめ

いかがでしたか?(これで締めてみたかった) みなさんもよいtidyverseでR lifeを🍀

何気に初めてのRの記事でした.