在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方案,但似乎无法创造一些没有用透明胶带粘在一起的东西。任何建议将不胜感激。提前谢谢。
答案 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