我目前正在构建一些与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
我一直在使用tq_transmute
中的tidyquant
函数来汇总每周数据。
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
出于我的图表目的,这只是一个很小的值,所以我一直在末尾丢弃部分星期,但这意味着我要丢弃最新数据。
我宁愿从数据集的开头扔掉一个星期,让聚合自动使用在脚本运行的任何一天结束的几周。因此,如果我今天(星期三)运行它,它将在截至周三的几周进行汇总,这样我便可以包含最新的数据...我可以从数据开始删除部分的一周。但是明天它将选择星期四等结束的几周,等等。我不想对结束日进行硬编码并每次都进行更改。
我该如何实现?
答案 0 :(得分:2)
使用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))