2

有几个问题与我正在寻找的问题很接近,但我找不到能正确解决的问题。

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

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

x 轴显然使用周数作为其值,但我希望它使用每周开始的实际日期(2008 年 1 月 1 日、2008 年 1 月 8 日、2013 年 12 月 25 日等) .

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

4

2 回答 2

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"
于 2014-01-16T17:08:44.323 回答
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()
于 2014-01-16T17:09:50.937 回答