2014-01-16 137 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() 
相關問題