日時の処理

date 型の変数の作成

  • 今日の日付
    • lubridate::today()
lubridate::today()
[1] "2023-07-17"
  • lubridate::make_date()
lubridate::make_date(2020, 12, 17)
[1] "2020-12-17"
  • lubridate::ymd()
lubridate::ymd("2020/12/17")
[1] "2020-12-17"

datetime型の変数の作成

  • lubridate::make_datetime
lubridate::make_datetime(2020, 12, 17, 10, 4, 59)
[1] "2020-12-17 10:04:59 UTC"
  • lubridate::ymd_hms()
lubridate::ymd_hms("2020/12/17 10:04:59")
[1] "2020-12-17 10:04:59 UTC"

datetime型からdate型への変換

  • lubridate::as_date()
lubridate::ymd_hms("2020/12/17 10:04:59") |> 
    lubridate::as_date()
[1] "2020-12-17"

要素の取得

日にち

  • lubridate::date()
lubridate::ymd_hms("2020/12/17 10:04:59") |> 
    lubridate::date()
[1] "2020-12-17"

  • lubridate::year()
lubridate::ymd_hms("2020/12/17 10:04:59") |> 
    lubridate::year()
[1] 2020

  • lubridate::month()
lubridate::ymd_hms("2020/12/17 10:04:59") |> 
    lubridate::month()
[1] 12

  • lubridate::day()
lubridate::ymd_hms("2020/12/17 10:04:59") |> 
    lubridate::day()
[1] 17

  • lubridate::hour()
lubridate::ymd_hms("2020/12/17 10:04:59") |> 
    lubridate::hour()
[1] 10

  • lubridate::minute()
lubridate::ymd_hms("2020/12/17 10:04:59") |> 
    lubridate::minute()
[1] 4

  • lubridate::second()
lubridate::ymd_hms("2020/12/17 10:04:59") |> 
    lubridate::second()
[1] 59

経過

年の始めから数える

  • lubridate::yday()
lubridate::ymd_hms("2020/12/17 10:04:59") |> 
    lubridate::yday()
[1] 352

週の始めから数える

  • lubridate::wday()
lubridate::ymd_hms("2020/12/17 10:04:59") |> 
    lubridate::wday()
[1] 5

丸め処理

  • ある要素以下を切り捨て
    • lubridate::floor_date()
lubridate::ymd_hms("2020/12/17 10:04:59") |> 
    lubridate::floor_date("minute")
[1] "2020-12-17 10:04:00 UTC"
  • ある要素以下を四捨五入
    • lubridate::floor_date()
lubridate::ymd_hms("2020/12/17 10:04:59") |> 
    lubridate::round_date("minute")
[1] "2020-12-17 10:05:00 UTC"
  • ある要素以下を切り上げ
    • lubridate::ceiling_date()
lubridate::ymd_hms("2020/12/17 10:04:59") |> 
    lubridate::ceiling_date("minute")
[1] "2020-12-17 10:05:00 UTC"

単位の変換

  • 秒に変換
    • 暦は無視!
    • lubridate::dyears()
    • lubridate::dmonths()
    • lubridate::dweeks()
    • lubridate::ddays()
    • lubridate::dhours()
    • lubridate::dminutes()
    • lubridate::dseconds()
lubridate::dyears(1) # 1年を秒単位で表す
[1] "31557600s (~1 years)"
lubridate::ddays(14) # 14日を秒単位で表す
[1] "1209600s (~2 weeks)"

日時を算出する

  • 以下の要素を用いて日付に足し引きできる
    • lubridate::years()
    • lubridate::months()
    • lubridate::weeks()
    • lubridate::days()
    • lubridate::hours()
    • lubridate::minutes()
    • lubridate::seconds()
lubridate::ymd("2016/1/1") + lubridate::years(1) # dが付かない関数は暦に従う。よってyears(1)はちょうど1年後
[1] "2017-01-01"
lubridate::ymd("2016/1/1") + lubridate::dyears(1) # d**関数は暦を無視する。よってdyears(1) = 365日
[1] "2016-12-31 06:00:00 UTC"

期間の計算

  • 間の時間を計算するための入れ物: lubridate::interval()
interval <- lubridate::interval(
    lubridate::ymd("2016/1/1"),
    lubridate::ymd("2016/2/1")
)
interval
[1] 2016-01-01 UTC--2016-02-01 UTC
  • インターバルの開始時点の取得: lubridate::int_start()
lubridate::int_start(interval)
[1] "2016-01-01 UTC"
  • インターバルの終了時点の取得: lubridate::int_end()
lubridate::int_end(interval)
[1] "2016-02-01 UTC"
  • インターバルの期間の取得 (秒単位): lubridate::int_length()
lubridate::int_length(interval) / (lubridate::ddays(1) |> as.numeric())
[1] 31
  • 期間がある期間と重複するか: lubridate::int_overlaps()
lubridate::int_overlaps(
    interval,
    lubridate::interval(
    lubridate::ymd("2016/2/1"),
    lubridate::ymd("2016/3/1")
    )
)
[1] TRUE
  • 期間を指定した分ずらす: lubridate::int_shift()
lubridate::int_shift(interval, lubridate::years(1))
[1] 2017-01-01 UTC--2017-02-01 UTC