【发布时间】:2019-01-29 10:53:56
【问题描述】:
我有一个关于过滤 R 中日期的问题。我发现例如这个链接 dplyr filter on Date,它回答了如何在特定日期范围内借助 dplyr 进行过滤的问题。我想选择一个动态范围,例如计算特定窗口中关键作业的数量,例如从数据集中的当前日期开始的最后 7 天。我想到的代码看起来像这样:
my.data %>%
group_by(category) %>%
filter(date > date - days(7) & date <= date) %>%
mutate(ncrit = sum(critical == 'yes'))
这不能正常工作。有没有办法用 dplyr 让它运行?
编辑:
对于不清楚的帖子表示歉意。完成这篇文章首先的想法是:想象计算机正在运行作业。如果计算机在过去 x 天未能计算作业,则更有可能它也无法计算当前作业。一个虚拟数据集包括计算机类别(例如 A/B)、日期和故障(是/否)
使用来自 Rui Barradas 的数据集,我想用 dplyr 添加以下列“过去 3 天内的关键工作数量”(在本例中 x = 3):
head(my.data, 7)
category date critical number of critical jobs in past 3 days
1 A 2018-08-14 yes NA
2 A 2018-08-15 no NA
3 A 2018-08-16 yes NA
4 A 2018-08-17 no 2
5 A 2018-08-18 yes 1
6 A 2018-08-19 no 2
7 A 2018-08-20 yes 1
数据(瑞巴拉达斯):
set.seed(3635)
my.data <- data.frame(category = rep(c('A', 'B'), each = 10), #
date = rep(seq(Sys.Date() - 9, Sys.Date(), by = 'days')),
critical = sample(c('no', 'yes'), 20, TRUE))
【问题讨论】:
-
请包含
my.data的示例数据。date列中的条目是否为日期对象(例如POSIXct)?还要解释为什么代码不能正常运行。有错误吗?警告?结果不是预期的结果吗? -
请注意
date > date - days(7)和date <= date始终为TRUE。 -
您现在是否对
"no"的值求和?如果是这样,第 3 行不应该是1吗? -
我将这些值相加“是”。在第 4 行(2018-08-17),我对第 14、15、16 天(2 次是)进行了总结。在第 3 行中,我添加了 NA,因为我希望正好有三天可用,但你是对的,可以将其更改为 1。
-
@Ollinator 看看对答案的编辑是否解决了它。