我知道如何从索引获取一周,但不知道相反的方法:如果我有日历周,如何创建索引(在这种情况下,从0CALWEEK为201501的SAP系统) ,201502 ... 201552,201553。
发现这个: How to Parse Year + Week Number in R? 但是这一天是必要的,并且不清楚如何设置它,特别是在年底(年 - 星期 - 星期:YEAR-53-01并不总是存在,因为第53周的第一天可能是星期一,然后01(星期日)不在那一周。
我可以尝试在相应周的第一天(通过SQL)进入源系统但是认为R可能会更容易...
你有什么建议吗?
(本周的第一天并不重要,因为我将以相同的方式创建所有对象,然后合并/合并它们,然后继续分析。如果动物园更容易,我会选择它)
谢谢!
答案 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非常适合时间序列, 请务必从数据框中删除包含日期的任何列