我正在使用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。
如果我不清楚,请告诉我,谢谢大家的帮助!
答案 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))