如何根据R中的日期范围来过滤? [英] How to filter by range of dates in R?
本文介绍了如何根据R中的日期范围来过滤?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我在处理数据库时遇到一些问题.如果能帮我一点忙,我将不胜感激。
我想计算在一段时间范围(例如,90天)内,观察结果(例如,注册车号)在数据库中出现的次数。为此,我有一个车号和日期的数字变量,格式为dd/mm/yyyy(时间序列的范围明显大于90天)。我的直觉是创建一个新的变量(MATICATE),该变量按变量日期对观测进行计数,但是我不知道如何引入时间限制。有什么想法吗?让我举个例子:
数据库
id date_dd/mm/yyyy
1 01/01/2021
1 01/02/2021
1 02/02/2021
1 03/02/2021
1 30/12/2021
2 05/07/2021
2 03/03/2021
2 04/12/2021
2 07/07/2021
12 01/05/2021
8 06/07/2021
我的主要目标是删除90天内重复三次以上的观察结果。总而言之,结果数据库将是:
id date_dd/mm/yyyy
1 01/01/2021
1 01/02/2021
1 02/02/2021
1 30/12/2021
2 05/07/2021
2 03/03/2021
2 04/12/2021
2 07/07/2021
12 01/05/2021
8 06/07/2021
正如我在上面解释过的,我的想法是创建一个新变量来计算每个id号在90天内重复的次数,然后通过删除新变量中得分高于3的观测值来过滤数据,但是我完全不知道如何在这个时间限制下创建这个新变量。
提前感谢
推荐答案
您可以这样做:
- 使用
lubridate
symd
函数获取日期格式 - GROUP BY
id
和arrange
- 计算到第一次约会的差额
- 添加行号列
row
- 根据您的情况选择过滤!
library(dplyr)
library(lubridate)
df %>%
mutate(date_dd.mm.yyyy = dmy(date_dd.mm.yyyy)) %>%
group_by(id) %>%
arrange(date_dd.mm.yyyy, .by_group = TRUE) %>%
mutate(diff = date_dd.mm.yyyy-first(date_dd.mm.yyyy)) %>%
mutate(row = row_number()) %>%
filter(row <=4 | diff < 90) %>%
select(-diff, -row)
id date_dd.mm.yyyy
<int> <date>
1 1 2021-01-01
2 1 2021-02-01
3 1 2021-02-02
4 1 2021-02-03
5 2 2021-03-03
6 2 2021-07-05
7 2 2021-07-07
8 2 2021-12-04
9 8 2021-07-06
10 12 2021-05-01
这篇关于如何根据R中的日期范围来过滤?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文