8

给定一个日期向量(可能跨越多年):

exampleDates = as.Date( 1 : 15, origin = as.Date( "2012-12-25" ) )

我想生成一个标识符,将日期分组为几周。因此,假设日历从星期日开始:

  • 26 日到 29 日将产生相同的标识符
  • 第 30 到第 5 具有相同的 id
  • 第 6 到第 9 具有相同的 id

这是一个有缺陷的尝试:

strftime( exampleDates , format = "%Y%W" )

它将第 31 天和第 1 天视为不同的周(不足为奇)。我正在寻找类似的东西,strftime它会生成一个标识符(字符、数字等),我可以用它来按周对日期进行分组。

我敢肯定那里已经有一些聪明的功能。

4

2 回答 2

10

这将为给定周内的日期组分配一个唯一整数:

origin <- as.Date("2012-12-9")  ## A Sunday
weekID <- as.numeric(exampleDates - origin) %/% 7

data.frame(date = exampleDates,
           weekday = weekdays(exampleDates),
           week = weekID)
#          date   weekday week
# 1  2012-12-26 Wednesday    2
# 2  2012-12-27  Thursday    2
# 3  2012-12-28    Friday    2
# 4  2012-12-29  Saturday    2
# 5  2012-12-30    Sunday    3
# 6  2012-12-31    Monday    3
# 7  2013-01-01   Tuesday    3
# 8  2013-01-02 Wednesday    3
# 9  2013-01-03  Thursday    3
# 10 2013-01-04    Friday    3
# 11 2013-01-05  Saturday    3
# 12 2013-01-06    Sunday    4
# 13 2013-01-07    Monday    4
# 14 2013-01-08   Tuesday    4
# 15 2013-01-09 Wednesday    4
于 2012-12-12T17:26:19.927 回答
4

使用差异时间,

floor(difftime(  exampleDates,as.Date( "2012-12-16" ), units = "week"))

time differences in weeks
 [1] 1 2 2 2 2 2 2 2 3 3 3 3 3 3 3
于 2012-12-12T17:32:36.637 回答