【发布时间】:2017-09-19 10:05:02
【问题描述】:
使用以下代码,我将日期拆分为年份,今年拆分为几周:
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 的列表? (也许转换第二个结果或以其他方式完成?)
【问题讨论】:
-
format(dates, "%Y-%U")?
标签: r list date data-structures lubridate