筛选在 r 中的事件"A"的时间范围内发生的事件

  • 本文关键字:事件 范围内 时间 筛选 r
  • 更新时间 :
  • 英文 :


我希望能够过滤所有的"B";在事件"0"之前5秒内发生的事件;A";。甚至不知道从哪里开始。这是一些样本数据。

set.seed(123)
event_df <- tibble(time_sec = c(1:120)) %>% 
sample_n(50) %>%
arrange(time_sec) %>% 
mutate(event = sample(c("A","B"), 
size = 50, 
replace = TRUE, 
prob = c(0.1,0.9)))

预期产出将与一致

tribble(
~time_sec,  ~event,
57, "B",
90, "B",
91, "B",
92, "B",
103, "B",
)

等等。

谢谢!

dplyr的一个选项是根据"event"中"a"值的出现创建一个分组列,获取它的lag,使每个块都有前面的"B"值和作为"a"的last值,然后,我们通过取"time_sec"的差值来计算filter,其中它是"A"(last值(,并检查它是否小于或等于5

library(dplyr)
event_df %>%
group_by(grp =  lag(cumsum(event == 'A'), default = 0)) %>% 
filter((last(time_sec) - time_sec) <=5)
# A tibble: 14 x 3
# Groups:   grp [6]
#   time_sec event   grp
#      <int> <chr> <dbl>
# 1       57 B         0
# 2       60 A         0
# 3       90 B         1
# 4       91 B         1
# 5       92 B         1
# 6       93 A         1
# 7       96 B         2
# 8       98 B         2
# 9       99 A         2
#10      103 B         3
#11      107 A         3
#12      113 B         4
#13      115 A         4
#14      117 B         5

使用基R的一种方法是获得相应的time_sec值,其中event == 'A'event_df仅选择time_sec小于5秒的行。

A_event <- event_df$time_sec[event_df$event == 'A']
subset(event_df, time_sec %in% c(sapply(A_event, `-`, 1:5)) & event == 'B')
#  time_sec event
#     <int> <chr>
#1       57 B    
#2       90 B    
#3       91 B    
#4       92 B    
#5       96 B    
#6       98 B    
#7      103 B    
#8      113 B    

相关内容

  • 没有找到相关文章

最新更新