今週も特にありません

進捗どうですか?

lubridate::floor_dateで任意の曜日スタートで切り下げ

タイトル通りのメモ。

library(tidyverse)
library(lubridate)

set.seed(12345)
order_tbl <- tibble(
  order_date = seq(ymd("2019-03-01"), ymd("2019-03-31"), by = "1 day"),
  order_num = rpois(31, 5)
)

日曜日と月曜日スタートする場合を追加します。

> order_tbl %>%
+   mutate(wd = weekdays(order_date),
+          sunday_start = floor_date(order_date, unit = "week"),
+          monday_start = floor_date(order_date, unit = "week", week_start = 1))
# A tibble: 31 x 5
   order_date order_num wd     sunday_start monday_start
   <date>         <int> <chr>  <date>       <date>      
 1 2019-03-01         6 金曜日 2019-02-24   2019-02-25  
 2 2019-03-02         8 土曜日 2019-02-24   2019-02-25  
 3 2019-03-03         6 日曜日 2019-03-03   2019-02-25  
 4 2019-03-04         8 月曜日 2019-03-03   2019-03-04  
 5 2019-03-05         5 火曜日 2019-03-03   2019-03-04  
 6 2019-03-06         3 水曜日 2019-03-03   2019-03-04  
 7 2019-03-07         4 木曜日 2019-03-03   2019-03-04  
 8 2019-03-08         5 金曜日 2019-03-03   2019-03-04  
 9 2019-03-09         6 土曜日 2019-03-03   2019-03-04  
10 2019-03-10        11 日曜日 2019-03-10   2019-03-04  
# … with 21 more rows

つまり、week_start = 1を指定すれば、月曜日スタートで切り下げられます。デフォルトでは、week_start = getOption("lubridate.week.start", 7)が設定されていますので、日曜日スタートになります。

round_datecelling_dateを含むfloor_dateの実装場所は以下になります。 github.com