r语言 - 将每日数据聚合为每周数据,今天结束



我目前正在构建一些与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

我一直在使用tidyquant中的tq_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

出于我的图表的目的,这最终是一个很小的值,所以我在最后丢弃了部分周,但这意味着我正在抛出最新的数据。

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

我怎样才能实现这一目标?

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

希望这有帮助!

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))

最新更新