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

时间:2013-11-05 01:21:13

标签: r lubridate

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

> Date
"2012-01-01 UTC"
"2013-01-01 UTC"

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

> week(Date)
1
1

Lubridate太棒了!

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

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

> result of awesome R code here
1
54

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

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

4 个答案:

答案 0 :(得分:13)

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

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

tda - min(tda)

将是它们之间的秒数差异。

要在几周内取出单位:

(tda - min(tda))/eweeks(1)

从特定日期开始:

tda - ymd(19960101)

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

从那里,您可以按每周的天数或每周的秒数进行划分。

(tda - ymd(19960101))/eweeks(1)

仅获取整数部分,并从2012年1月开始:

trunc((tda - ymd(20111225))/eweeks(1))

测试数据:

tda = ymd(c(20120101, 20120106, 20130101, 20130108))

输出:

 1  1 53 54

答案 1 :(得分:3)

由于eweeks()现已弃用,我认为我会添加@beroe的答案。

如果tda是您的日期向量,您可以使用以下内容获取周数:

weeknos <- (interval(min(tda), tda) %/% weeks(1)) + 1

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

答案 2 :(得分:2)

您可以这样做:

week(dat) +53*(year(dat)-min(year(dat)))

答案 3 :(得分:0)

给你你喜欢的润滑脂(我也是)

year_week <- function(x,base) week(x) - week(base) + 52*(year(x) - year(base))
test <- ymd(c(20120101, 20120106, 20130101, 20130108))
year_week(test, "2012-01-01")

给予

[1]  0  0 52 53