2014-01-16 69 views
2

有几个问题已经接近我正在寻找的内容,但是我找不到一个能够正确使用的问题。周数到R中每周的开始日期

我在6年内每天都有几种产品的销售数据。我从2008年1月1日起按周对数据进行了总结。在1/1/08-12/30/13期间,有313周,所以我刚刚为每个产品创建了包含第1-313周的列的数据框以及每周的每周销售额。

我与GGPLOT2绘制它们,添加趋势线,等

x轴显然用于其值周数,但如果使用每星期开始的实际日期我宁愿( Jaunary 1,2008,2008年1月8日星期二,2013年12月25日等)。

这样做的最好方法是什么?我如何将1-313周转换为各自的星期几开始日期?或者,有没有一种方法可以覆盖图本身的轴值?

回答

2

要转换您的周数将日期尝试这样的事情

weeks <- 1:313 
start.date <- as.Date("2007/12/31") 
y <- start.date + (weeks - 1)*7 

head(y) 
"2007-12-31" "2008-01-07" "2008-01-14" "2008-01-21" "2008-01-28" "2008-02-04" 
+0

这工作完美。谢谢! – datahappy

+0

不客气:)请接受此为“答案”。 – Stuples

+0

还可以考虑使用'lubridate'进行日期/时间管理。你会少掉头发。 – Spacedman

1

使用package:lubridate

采样数据(你应该已经提供):

> df = data.frame(wid=1:10,z=runif(10)) 
> head(df) 
    wid   z 
1 1 0.2071595 
2 2 0.4313403 
3 3 0.7063967 
4 4 0.2245014 
5 5 0.2004542 
6 6 0.1231366 

假设你的数据是连续的,无间隙:

> require(lubridate) 
> df$week=mdy("Jan 1 2008") + weeks(0:(nrow(df)-1)) 
> head(df) 
    wid   z  week 
1 1 0.2071595 2008-01-01 
2 2 0.4313403 2008-01-08 
3 3 0.7063967 2008-01-15 
4 4 0.2245014 2008-01-22 
5 5 0.2004542 2008-01-29 
6 6 0.1231366 2008-02-05 

然后画出了漂亮的标签:

> require(ggplot2) 
> ggplot(df,aes(x=week,y=z))+geom_line() 
相关问题