如何获得一周内的所有天数?

How to get all days inside a week?

我有一个时期,我想从周一到周日分成几个星期。

使用lubridate,我可以查询日期的周数:

library(lubridate)
td = today()
week(td) #48

我怎样才能找到属于第 48 周的所有日子,比如 2020 年?

您可以使用 seqas.Date,其中 %Y 是年份,%W 是一年中的第几周,%a 是工作日的缩写。

seq(as.Date("2020-48-Mo", "%Y-%W-%a"), by=1, length.out=7)
#as.Date("2020-48-Mo", "%Y-%W-%a") + 0:6 #Alternative
#as.Date("2020-48-1", "%Y-%W-%u") + 0:6 #Alternative
#[1] "2020-11-30" "2020-12-01" "2020-12-02" "2020-12-03" "2020-12-04"
#[6] "2020-12-05" "2020-12-06"

如果星期天是第一天,使用 %U,星期一是 %W,周从 0 开始。使用 %V,以星期一为第一天,以 1.

开始的星期

如果您有一个日期并且想要本周的所有日期:

x <- as.Date("2020-11-25")
x - as.integer(format(x, "%u")) + 1:7
#[1] "2020-11-23" "2020-11-24" "2020-11-25" "2020-11-26" "2020-11-27"
#[6] "2020-11-28" "2020-11-29"

根据 GKi 的回答,我可以写一个非常方便的函数:

library(lubridate, warn.conflicts=F)
library(glue, warn.conflicts=F)
get_week = function(x){
  week_monday = glue("{year(x)}-{isoweek(x)-1}-1")
  week_monday = as.Date(week_monday, "%Y-%W-%u")
  seq(week_monday, by=1, length.out=7)
}
get_week(ymd("2020-11-25")) #a wednesday
#> [1] "2020-11-23" "2020-11-24" "2020-11-25" "2020-11-26" "2020-11-27"
#> [6] "2020-11-28" "2020-11-29"
get_week(ymd("2020-11-30")) #a monday
#> [1] "2020-11-30" "2020-12-01" "2020-12-02" "2020-12-03" "2020-12-04"
#> [6] "2020-12-05" "2020-12-06"

reprex package (v0.3.0)

于 2020-11-30 创建