代码之家  ›  专栏  ›  技术社区  ›  Delopera

R: 从前几行筛选时间范围内的行

  •  0
  • Delopera  · 技术社区  · 3 年前

    让我们想象一下我有这样的数据帧

    事件 时间 类型
    1. 2022-07-15 18:08:05 def
    2. 2022-07-15 18:08:06 att
    3. 2022-07-15 18:09:00 def
    4. 2022-07-15 18:09:12 def
    5. 2022-07-15 18:13:26 def
    6. 2022-07-15 18:13:36 att
    7. 2022-07-15 18:19:05 def
    8. 2022-07-15 18:21:43 def
    9 2022-07-15 18:26:06 att
    10 2022-07-15 18:27:26 def

    我只想保留在“def”类型的行之后15秒内出现的“att”类型行。

    因此,所需的输出是:

    事件 时间 类型
    2. 2022-07-15 18:08:06 att
    6. 2022-07-15 18:13:36 att

    你能帮我弄清楚吗?

    1 回复  |  直到 3 年前
        1
  •  2
  •   jpsmith    3 年前

    你可以使用 dplyr::filter() dplyr::lag() 在这里假设您 time 变量采用日期时间格式:

    library(dplyr)
    
    df %>%
      filter(type == "att", 
             (time - dplyr::lag(time)) < 15, # could also use `(difftime(time, lag(time), units = "secs")) < 15`
             lag(type) == "def")
    
    #   event                time type
    # 1     2 2022-07-15 18:08:06  att
    # 2     6 2022-07-15 18:13:36  att
    

    数据:

    df <- read.table(text = "event  time    type
    1   '2022-07-15 18:08:05'   def
    2   '2022-07-15 18:08:06'   att
    3   '2022-07-15 18:09:00'   def
    4   '2022-07-15 18:09:12'   def
    5   '2022-07-15 18:13:26'   def
    6   '2022-07-15 18:13:36'   att
    7   '2022-07-15 18:19:05'   def
    8   '2022-07-15 18:21:43'   def
    9   '2022-07-15 18:26:06'   att
    10  '2022-07-15 18:27:26'   def", h = TRUE)
    
    df$time <- lubridate::as_datetime(df$time)
    
    推荐文章