R中每周开始日期的周数

时间:2014-01-16 17:00:21

标签: r ggplot2 dataframe time-series timeserieschart

有些问题已经接近我正在寻找的问题,但我找不到一个可以正确使用的问题。

我在6年内每天都有几种产品的销售数据。我从2008年1月1日开始按周汇总数据。在1/1 / 08-12 / 30/13期间,共有313周,所以我只创建了每个产品的数据框,其中包含第1-313周的列和每个星期的每周销售额。

我正在用ggplot2绘制它们,添加趋势线等等。

x轴明显使用其值的周数,但我更喜欢它是否使用了每周开始的实际日期(2008年1月8日星期二,2008年1月8日,星期二)等等。)

最好的方法是什么?如何将1-313周转换为各自的周初日期?或者,有没有办法覆盖绘图本身的轴值?

2 个答案:

答案 0 :(得分: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"

答案 1 :(得分: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()