如何将 floor_date() 舍入到任意日期?

How to round floor_date() to arbitrary date?

我正在使用 floor_date 将日期四舍五入到周:

library(lubridate)
floor_date(ymd_hms('2016-08-26 16:27:15'), '7 days')
[1] "2016-08-22 UTC"

不过,我想定一个具体的日期作为第一周的开始。 例如,我想将 "2016-08-26 UTC" 设置为第一周。作为一种解决方法,我试图调整 getOption("lubridate.week.start"),但无论我通过什么,我都无法更改开始工作日:

> floor_date(ymd_hms('2016-08-26 16:27:15'), '7 days', week_start = getOption("lubridate.week.start", 1))
[1] "2016-08-22 UTC"
> floor_date(ymd_hms('2016-08-26 16:27:15'), '7 days', week_start = getOption("lubridate.week.start", 7))
[1] "2016-08-22 UTC"

您需要设置unit = "week"。来自 ?round_date

week_start: when unit is weeks specify the reference day; 7 being Sunday.

示例

library(lubridate)
lapply(c(1, 5), function(x) floor_date(ymd('2016-08-26'), 'week', week_start = x))
#[[1]]
#[1] "2016-08-22"
#
#[[2]]
#[1] "2016-08-26"