我希望能够过滤事件“ A”之前5秒钟内发生的所有“ B”事件。甚至不确定从哪里开始。这是一些示例数据。
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
是根据“事件”中“ A”值的出现创建分组列,获取分组值,lag
以便每个块都具有前面的“ B”值和last
值为“ A”,然后我们做filter
通过取的差“time_sec”,其中它是“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
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句