如何根据条件找到后续审判?

时间:2018-12-20 23:43:39

标签: r subsequence

我正在使用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。

以下是数据示例(很抱歉,不知道如何更好地格式化数据):

enter image description here

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

如果我不清楚,请告诉我,谢谢大家的帮助!

1 个答案:

答案 0 :(得分:2)

一种方法是:

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))