如何根据条件找到后续试验?

How can I find a subsequent trial based on a condition?

我正在使用 R 来操作包含 20,000 多行的大型数据集(数据集)。在我的数据中,我有三个重要的列来关注这个问题:Trial_Nr(由 90 次试验组成)、秒(以 .02 秒的增量增加)和威胁(对威胁的固定:1=是,0 =不,不适用)。在每次试验中,我需要回答当最初注视威胁 (1) 时,他们需要多长时间才能不注视威胁 (0)。所以基本上,在每次试验中,我需要找到第一个威胁=1 和随后的威胁=0 并减去时间。我能够使用此代码获得第一个威胁:

initalfixthreat <- dataset %>%
                   group_by(Trial_Nr) %>%
                  slice(which(threat == '1')[1])

我对如何在该试用号内获得后续威胁=0感到困惑。

这是一个数据示例(抱歉不知道如何更好地格式化):

所以对于 Trial_Nr=1,我感兴趣的是 689.9 秒 - 689.8。 对于 Trial_Nr=2,我想要 690.04-689.96。

如有不明之处请告知,谢谢大家的帮助!

一种方法是:

library(dplyr)

df %>%
  group_by(Trial_Nr) %>%
  filter(!is.na(threat)) %>%
  mutate(flag = ifelse(threat == 1, 1, threat - lag(threat))) %>% 
  filter(abs(flag) == 1 & !duplicated(flag)) %>%
  summarise(timediff = ifelse(length(seconds) == 1, NA, diff(seconds)))

# A tibble: 2 x 2
  Trial_Nr timediff
     <int>  <dbl>
1        1 0.1   
2        2 0.0800

数据:

df <- structure(list(Trial_Nr = c(1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 
1L, 2L, 2L, 2L, 2L, 2L), seconds = c(689.76, 689.78, 689.8, 689.82, 
689.84, 689.86, 689.88, 689.9, 689.92, 689.94, 689.96, 689.98, 
690, 690.02, 690.04), threat = c(0L, 0L, 1L, 1L, 1L, NA, NA, 
0L, 1L, 0L, 1L, NA, NA, 1L, 0L)), class = "data.frame", row.names = c(NA, 
-15L))