我希望在一年内找到R中的一周的日期列表。但是,输出相当奇怪。
见下文:
week("2000-01-01")
week("2000-01-06")
week("2000-01-07")
week("2000-01-13")
week("2000-01-14")
返回1,1,2,2,3
但是,如果您查看日历:http://calendars.generalblue.com/content/images/calendars/2000/01-January-2000-Calendar.png
你希望它是1,2,3,3,3。
出于某种原因,这将在周四结束。这不奇怪吗?
有谁知道我应该怎么做才能得到预期的1,2,3,3,3个结果?
答案 0 :(得分:2)
查看?week
周数是已发生的完整七天时段的数量 在日期和1月1日之间加一。 isoweek返回一周 因为它出现在ISO 8601系统中,它使用了重新固化 闰周。
使用isoweek功能可以得到以下结果。
require(lubridate)
dates <- c("2000-01-01","2000-01-06","2000-01-07","2000-01-13","2000-01-14")
sapply(dates, isoweek)
2000-01-01 2000-01-06 2000-01-07 2000-01-13 2000-01-14
52 1 1 2 2
所以一周一次&#34;开始&#34;为了你?在下面的日期函数中,星期日开始一周
require(lubridate)
my_week <- function(x){
# fst monday of the same year
first_sun <- as.POSIXct(paste0(year(x),"-01-Mon"), format = "%Y-%U-%a")
(yday(x) + (7 - yday(first_sun) + 1)) %/% 7
}
dates <- seq(as.Date("2000-01-01"), as.Date("2000-01-15"), by=1)
a <- sapply(dates, my_week)
names(a) <- dates
> a
2000-01-01 2000-01-02 2000-01-03 2000-01-04 2000-01-05
0 1 1 1 1
2000-01-06 2000-01-07 2000-01-08 2000-01-09 2000-01-10
1 1 1 2 2
2000-01-11 2000-01-12 2000-01-13 2000-01-14 2000-01-15
2 2 2 2 2