R:从日历周创建xts时间对象的索引,例如201501 ... 201553

时间:2017-07-27 15:24:13

标签: r xts zoo

我知道如何从索引获取一周,但不知道相反的方法:如果我有日历周,如何创建索引(在这种情况下,从0CALWEEK为201501的SAP系统) ,201502 ... 201552,201553。

发现这个: How to Parse Year + Week Number in R? 但是这一天是必要的,并且不清楚如何设置它,特别是在年底(年 - 星期 - 星期:YEAR-53-01并不总是存在,因为第53周的第一天可能是星期一,然后01(星期日)不在那一周。

我可以尝试在相应周的第一天(通过SQL)进入源系统但是认为R可能会更容易...

你有什么建议吗?

(本周的第一天并不重要,因为我将以相同的方式创建所有对象,然后合并/合并它们,然后继续分析。如果动物园更容易,我会选择它)

谢谢!

3 个答案:

答案 0 :(得分:1)

问题是所有指数都在2015-07-29结束:

data <- 1:4
weeks <- c('201501','201502','201552','201553')
weeks_2 <- as.Date(weeks,format='%Y%w') 
xts(data, order.by = weeks_2)

[1]

2015-07-29 1

2015-07-29 2

2015-07-29 3

2015-07-29 4

test <- xts(data, order.by = weeks_2)
index(test)

[1]&#34; 2015-07-29&#34; &#34; 2015年7月29日&#34; &#34; 2015年7月29日&#34; &#34; 2015年7月29日&#34;

答案 1 :(得分:0)

您可以使用as.Date()功能,我认为这是最简单的方法:

weeks <- c('201501','201502','201552','201553')
as.Date(paste0(weeks,'1'),format='%Y%W%w') # paste a dummy day
## [1] "2015-01-05" "2015-01-12" "2015-12-28" NA   

其中:

  

%W:第00-53周,周一为一周的第一天

     

     

%U:第01-53周,周日为一周的第一天

     

%w:工作日0-6周日为0

今年,第53周并不存在。如果您想从2015-01-01开始,只需设置正确的工作日:

weeks <- c('201500','201501','201502','201551','201552')
as.Date(paste0(weeks,'4'),format='%Y%W%w')
## [1] "2015-01-01" "2015-01-08" "2015-01-15" "2015-12-24" "2015-12-31"

答案 2 :(得分:0)

您可以尝试使用substr()和lubridate

library(lubridate)
# a number from your list: 201502
# set the year
x <- ymd("2015-01-1")
# retrieve second week
week(x) <- 2
x
[1] "2015-01-08" 

您可以将结果用于索引或rownames()。

设置名称后,

zoo和xts非常适合时间序列, 请务必从数据框中删除包含日期的任何列

相关问题