2014-11-25 62 views
0

我期待在R中查找一年内的日期列表。但是,输出结果很奇怪。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,2,3,3.

由于某种原因,这会在周四翻身。这不奇怪吗?

有谁知道我该怎么做才能得到预期的1,2,2,3,3结果?

回答

2

看一看?week

周是已经发生的日期和1月1日,加一间 完整7天周期数。 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 

那么,你什么时候开始一周“开始”?在下面的日期功能一周开始的星期天

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 
+0

那......真的很烦人......谢谢! – 2014-11-25 02:31:18