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