【发布时间】:2020-11-30 12:30:41
【问题描述】:
我有一段时期,我想从星期一到星期日分成几个星期。
使用lubridate可以查询日期的周数:
library(lubridate)
td = today()
week(td) #48
我怎样才能找到属于 2020 年第 48 周的所有日子?
【问题讨论】:
标签: r lubridate week-number
我有一段时期,我想从星期一到星期日分成几个星期。
使用lubridate可以查询日期的周数:
library(lubridate)
td = today()
week(td) #48
我怎样才能找到属于 2020 年第 48 周的所有日子?
【问题讨论】:
标签: r lubridate week-number
您可以使用seq 和as.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"
【讨论】:
%U。
seq(as.Date("2020-48", "%Y-%U"), by=1, length.out=7) %>% week() 给出:[1] 48 48 49 49 49 49 49
format(seq(as.Date("2020-48-Mo", "%Y-%W-%a"), by=1, length.out=7), "%W") "48" "48" "48" "48" "48" "48" "48"。这也取决于您是从0 还是从1 开始计算周数。
lubridate::parse_date() 不支持那些非常方便的格式。
根据 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 日创建
【讨论】:
%u 和1 而不是获取星期一字符串
get_week <- function(x) {seq(x - as.integer(format(x, "%u")) + 1, by=1, length.out=7)}