用下面的代码我分裂日期,年裂枣,这几年到周:按年份和周,今后每年正确的周数
library(lubridate)
start = as.Date('2002-01-01')
end = as.Date('2017-01-01')
dates = sample(seq(as.Date('2002-01-01 00:00:00'), as.Date('2017-04-01 00:00:00'), by="day"), end-start,replace = FALSE)
splitByYears = split(dates, year(dates))
splitYearsByWeeks = lapply(splitByYears, function(x) split(x, isoweek(x)))
在此基础上输出我做了几个计算。只有当我正在策划一些数据,我注意到,这个过程并不完美:
>splitYearsByWeeks
...
$`2011`$`52`
[1] "2011-01-01" "2011-01-02" "2011-12-26"
$`2012`
$`2012`$`1`
[1] "2012-12-31" "2012-01-02" "2012-01-06" "2012-01-08"
...
这里2011-01-01 2011-01-02和2010年第52周的一部分,但由于拆分的第一日期分配到2011年第52周。同样的问题出现在2012年12月31日,这个日期是2013年第一周的一部分,但分配到2012年的第一周,因为我每年单独应用该功能。
按年份拆分并且每年拆分成几周给我我需要的格式,但是周年关系不可能是正确的。为了得到正确的周数,我可以先通过一周,比去年拆分:
splitByWeek = split(dates, isoweek(dates))
splitWeeksByYear = lapply(splitByWeek, function(x) split(x, year(x)))
但格式不正是我需要:
>splitWeeksByYear
...
$`53`
$`53`$`2004`
[1] "2004-12-31" "2004-12-29" "2004-12-28"
$`53`$`2005`
[1] "2005-01-01"
$`53`$`2009`
[1] "2009-12-28"
$`53`$`2015`
[1] "2015-12-30"
$`53`$`2016`
[1] "2016-01-03"
什么是获得的最好办法正确的星期在我需要的格式:$ year $ weekNum? (也许转换第二个结果或完成其他方式吗?)
'格式(日期,“%Y-%U”)'? –