如何在R中根据周数计算日期

  • 本文关键字:周数 计算 日期
  • 更新时间 :
  • 英文 :


我想知道是否有一种方法可以根据R中的周数获得周日期的开始?例如,如果我输入周数= 10,它应该会显示2014年3月9日。

我知道如何得到相反的…给定一个日期,使用as获取周数。POSIX函数)。

谢谢!Prakhar

你可以试试:

first.day <- as.numeric(format(as.Date("2014-01-01"), "%w"))
week <- 10
as.Date("2014-01-01") + week * 7 - first.day
# [1] "2014-03-09"

假设每周从星期日开始。首先,找出1月1日是星期几,然后,在1月1日上加上7 *周数,得到1月1日是星期几。

注意,这与反向使用%W时得到的结果略有不同,因为从那个角度来看,一周的第一天似乎是星期一:

format(seq(as.Date("2014-03-08"), by="1 day", len=5), "%W %A %m-%d")
# [1] "09 Saturday 03-08"  "09 Sunday 03-09"    "10 Monday 03-10"    "10 Tuesday 03-11"  
# [5] "10 Wednesday 03-12"

但是如果你喜欢星期一为中心的视图,你可以很容易地调整上面的代码。

您可以尝试ISOweek包中的ISOweek2date功能。

创建一个以年、周、日为参数并返回日期的函数:

date_in_week <- function(year, week, weekday){
  w <- paste0(year, "-W", sprintf("%02d", week), "-", weekday)
  ISOweek2date(w)
}
date_in_week(year = 2014, week = 10, weekday = 1)
# [1] "2014-03-03"

此日期对应于ISO8601日历(见?strptime中的%V)。我假设您使用的是美国惯例(参见?strptime中的%U)。然后需要在ISO8601和美国标准之间进行转换:

date_in_week(year = 2014, week = 10 + 1, weekday = 1) - 1
# [1] "2014-03-09"

可以输入几个工作日,例如

date_in_week(year = 2014, week = 10 + 1, weekday = 1:3) - 1
# [1] "2014-03-09" "2014-03-10" "2014-03-11"

您还可以使用strptime轻松地从星期一开始的星期中获取日期:

first_date_of_week <- function(year, week){
  strptime(paste(year, week, 1), format = "%Y %W %u")
}

您可以使用润滑包

完成此操作
library(lubridate)
start = ymd("2014-01-01")
#[1] "2014-01-01 UTC"
end = start+10*weeks()
end = end-(wday(end)-1)*days()
#[1] "2014-03-09 UTC"

最新更新