14

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

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

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

> week(Date)
1
1

润滑太棒了!

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

我一直在努力寻找一些方法来实现这一点:

> result of awesome R code here
1
54

问题:是否有一种简洁的方法可以在 Lubridate 中哄骗出多年期间的周数列表?更直接地说,我希望将第二年的第一周表示为第 54 周。第三年的第一周被表示为第 107 周,令人作呕。

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

4

4 回答 4

14

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

如果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
于 2013-11-05T01:39:30.503 回答
5

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

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

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

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

于 2017-01-18T11:54:44.833 回答
2

你可以这样做:

week(dat) +53*(year(dat)-min(year(dat)))
于 2013-11-05T01:46:03.317 回答
0

鉴于你喜欢 lubridate(我也是)

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
于 2020-05-20T01:46:55.063 回答