【问题标题】:Week Number to Starting Date of Each Week in RR中每周开始日期的周数
【发布时间】:2014-02-05 17:34:47
【问题描述】:

一些问题与我正在寻找的问题很接近,但我找不到一个正确的问题。

我有 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 周转换为各自的开始日期?或者,有没有办法覆盖绘图本身的轴值?

【问题讨论】:

    标签: r ggplot2 dataframe time-series timeserieschart


    【解决方案1】:

    要将您的周数转换为日期,请尝试以下操作

    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"
    

    【讨论】:

    • 还可以考虑使用lubridate 进行日期/时间管理。你会少掉头发。
    【解决方案2】:

    使用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()
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-11-19
      • 1970-01-01
      • 1970-01-01
      • 2022-06-29
      • 1970-01-01
      • 2015-10-14
      • 2022-11-12
      • 1970-01-01
      相关资源
      最近更新 更多