Question

A few questions have come close to what I am looking for, but I can't find one that gets it right on.

I have sales data for several products for each day over a 6-year period. I summed the data by week, starting January 1, 2008. During the period 1/1/08-12/30/13, there were 313 weeks, so I just created dataframes for each product that contained columns for week numbers 1-313 and the weekly sales for each respective week.

I am plotting them with ggplot2, adding trendlines, etc.

The x-axis obviously uses the week number for its values, but I would prefer if it used the actual dates of the start of each week (Jaunary 1, 2008, a Tuesday, January 8, 2008, December 25, 2013, etc).

What is the best way to do this? How can I convert weeks 1-313 into their respective Start of Week dates? Or, is there a way to override the axis values on the plot itself?

Was it helpful?

Solution

To convert your week numbers to dates try something like this

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"

OTHER TIPS

Use package:lubridate?

Sample data (which you should have provided):

> 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

Assuming your data are consecutive, with no gaps:

> 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

Then plot for nice labels:

> require(ggplot2)
> ggplot(df,aes(x=week,y=z))+geom_line()
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top