有些问题已经接近我正在寻找的问题,但我找不到一个可以正确使用的问题。
我在6年内每天都有几种产品的销售数据。我从2008年1月1日开始按周汇总数据。在1/1 / 08-12 / 30/13期间,共有313周,所以我只创建了每个产品的数据框,其中包含第1-313周的列和每个星期的每周销售额。
我正在用ggplot2绘制它们,添加趋势线等等。
x轴明显使用其值的周数,但我更喜欢它是否使用了每周开始的实际日期(2008年1月8日星期二,2008年1月8日,星期二)等等。)
最好的方法是什么?如何将1-313周转换为各自的周初日期?或者,有没有办法覆盖绘图本身的轴值?
答案 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()