如何根据R中的日期范围来过滤? [英] How to filter by range of dates in R?

查看:11
本文介绍了如何根据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的观测值来过滤数据,但是我完全不知道如何在这个时间限制下创建这个新变量。

提前感谢

推荐答案

您可以这样做:

  1. 使用lubridatesymd函数获取日期格式
  2. GROUP BYidarrange
  3. 计算到第一次约会的差额
  4. 添加行号列row
  5. 根据您的情况选择过滤!
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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆