【问题标题】:Aggregating daily data to weekly, ending today将每日数据汇总到每周,今天结束
【发布时间】:2020-05-20 20:36:50
【问题描述】:

我目前正在构建一些与 covid 相关的数据图表......我的脚本会输出并下载最新数据并从那里开始。我最终得到了看起来像

的数据框
head(NMdata)

    Date state positiveIncrease totalTestResultsIncrease
1 2020-05-19    NM              158                     4367
2 2020-05-18    NM               81                     4669
3 2020-05-17    NM              195                     4126
4 2020-05-16    NM              159                     4857
5 2020-05-15    NM              139                     4590
6 2020-05-14    NM              152                     4722

我一直在使用来自tidyquanttq_transmute 函数汇总每周数据。

NMweeklyPos <- NMdata %>% tq_transmute(select = positiveIncrease, mutate_fun = apply.weekly, FUN=sum)

这可行,但它会在一年中的某个星期聚合,星期几从星期日开始。

head(NMweeklyPos)

Date                positiveIncrease
  <dttm>                         <int>
1 2020-03-08 00:00:00                0
2 2020-03-15 00:00:00               13
3 2020-03-22 00:00:00               44
4 2020-03-29 00:00:00              180
5 2020-04-05 00:00:00              306
6 2020-04-12 00:00:00              631

例如,如果我今天运行它(恰好是星期三),我的最后一个条目是星期一、星期二、星期三的部分星期。

tail(NMweeklyPos)

 Date                positiveIncrease
  <dttm>                         <int>
1 2020-04-19 00:00:00              624
2 2020-04-26 00:00:00              862
3 2020-05-03 00:00:00             1072
4 2020-05-10 00:00:00             1046
5 2020-05-17 00:00:00             1079
6 2020-05-19 00:00:00              239

就我的图表而言,这最终是一个很小的值,因此我在最后舍弃了部分周,但这意味着我要丢弃最新的数据。

我更希望从数据集开始时抛出部分周,并让聚合自动使用在脚本运行的任何一天结束的周。因此,如果我今天(周三)运行它,它将在周三结束的几周内进行汇总,以便我包含最新的数据......我可以从数据开始时删除部分周。但是明天它会选择周四结束的几周,等等。而且我不想每次都硬编码周末的日期并更改它。

我该如何实现这一目标?

【问题讨论】:

    标签: r time-series


    【解决方案1】:

    使用 lubridate,下面的代码将找到一周中的哪一天,并将该天定义为每周的地板。

    希望这会有所帮助!

    library(lubridate)
    library(dplyr)
    
    end = as.Date("2020-04-14")
    data = data.frame(
      date = seq.Date(as.Date("2020-01-01"), end, by = "day"),
      val = 1
    )
    
    # get the day of the week
    weekday = wday(end)
    
    # using the floor_date function we can use todays date to determine what day of the week will be our floor
    data%>%
      mutate(week = floor_date(date, "week", week_start = weekday))%>%
      group_by(week)%>%
      summarise(total = sum(val))
    

    【讨论】:

    • 做到了!谢谢...您不知道如何告诉 ggplot 移动 x 轴标签吗?我可能会发布一个新问题。它想让 x 轴刻度从星期一开始(我猜是因为它识别出它们是日期),但这与我现在的列不符,这些列基于在星期三结束的周......
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-02
    • 1970-01-01
    相关资源
    最近更新 更多