我想知道是否有办法根据R中的周数来获得周日期的开始?例如,如果我输入周数= 10,它应该给我2014年3月9日。
我知道如何获得反转(也就是说...给出一个日期,通过使用as.POSIX函数获取周数)。
谢谢! Prakhar
答案 0 :(得分:5)
你可以试试这个:
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月1日,即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"
但如果您更喜欢以星期一为中心的视图,则可以轻松调整上述代码。
答案 1 :(得分:4)
您可以尝试ISOweek2date
包中的ISOweek
功能。
创建一个以年,周,工作日为参数并返回日期的函数:
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日历(请参阅%V
中的?strptime
)。我假设您使用的是美国惯例(请参阅%U
中的?strptime
)。然后需要一些tweeking来转换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"
答案 2 :(得分:1)
您可以使用包 lubridate
来完成此操作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"
答案 3 :(得分:0)
您还可以使用strptime轻松获取周一开始的几周的日期:
first_date_of_week <- function(year, week){
strptime(paste(year, week, 1), format = "%Y %W %u")
}