Lubridate week()查找多年期间的连续周数

Mat*_*ien 13 r lubridate

在R中,假设我有一些Lubridate日期的向量:

> Date
"2012-01-01 UTC"
"2013-01-01 UTC"
Run Code Online (Sandbox Code Playgroud)

接下来,假设我想看看这几天的周数:

> week(Date)
1
1
Run Code Online (Sandbox Code Playgroud)

Lubridate太棒了!

但是等等......我正在处理一个包含10,000行数据的时间序列......数据跨越3年.

我一直在努力寻找实现这一目标的方法:

> result of awesome R code here
1
54
Run Code Online (Sandbox Code Playgroud)

问题是:是否有一种简洁的方法可以在Lubridate的多年内输出一周的周数列表?更直接的是,我希望第二年的第一周能够代表第54周.而第三年的第一周将作为第107周的代表,令人作呕.

到目前为止,我已经尝试了一些hackney方案,但似乎无法创造一些没有用透明胶带固定在一起的东西.任何建议将不胜感激.提前致谢.

ber*_*roe 13

要获取从特定日期到另一个日期的间隔,您可以减去...

如果tda是你的日期向量,那么

tda - min(tda)
Run Code Online (Sandbox Code Playgroud)

将是他们之间的秒数差异.

要在几周内取出单位:

(tda - min(tda))/eweeks(1)
Run Code Online (Sandbox Code Playgroud)

要从特定日期开始:

tda - ymd(19960101)
Run Code Online (Sandbox Code Playgroud)

这给出了从1996年到每个值的天数.

从那里,您可以按每周或每周的秒数除以.

(tda - ymd(19960101))/eweeks(1)
Run Code Online (Sandbox Code Playgroud)

要获得整数部分,并从2012年1月开始:

trunc((tda - ymd(20111225))/eweeks(1))
Run Code Online (Sandbox Code Playgroud)

测试数据:

tda = ymd(c(20120101, 20120106, 20130101, 20130108))
Run Code Online (Sandbox Code Playgroud)

输出:

 1  1 53 54
Run Code Online (Sandbox Code Playgroud)


s-h*_*ins 5

由于eweeks()现在已弃用,我想我会添加到@beroe 的答案中。

如果tda是您的日期向量,您可以通过以下方式获取周数:

weeknos <- (interval(min(tda), tda) %/% weeks(1)) + 1
Run Code Online (Sandbox Code Playgroud)

where%/%导致整数除法。( 5 / 3 = 1.667; 5 %/% 3 = 1)