Suppose your data were represented as parallel vectors "time" and "type", meaning that at time[i] a type[i] event occurred. You didn't say what you wanted if there were a run of "A" or "B". If you are looking for the time span between the last of a run of one sort of event and the first of a run of the other sort of event then the following can be used.
f <- function(time, type, fromType, toType) { # return times of (fromTime) last of a run of 'fromType' and # (toTime) first of subsequent run of 'toType for each such transition. stopifnot(length(time)==length(type), !anyNA(type), !anyNA(time), !is.unsorted(time), length(fromType)==1, length(toType)==1) i <- seq_len(length(time)-1) iBeforeChange <- which((type[i] == fromType) & (type[i+1] == toType)) data.frame(fromTime=time[iBeforeChange], toTime=time[iBeforeChange+1L]) } E.g., > d <- data.frame(time=c(101,102,102,105,107,111,115), type=c("A","A","B","A","B","B","A")) > d time type 1 101 A 2 102 A 3 102 B 4 105 A 5 107 B 6 111 B 7 115 A > f(time=d$time, type=d$type, fromType="A", toType="B") fromTime toTime 1 102 102 2 105 107 > with(.Last.value, toTime - fromTime) [1] 0 2 > f(time=d$time, type=d$type, fromType="B", toType="A") fromTime toTime 1 102 105 2 111 115 > with(.Last.value, toTime - fromTime) [1] 3 4 With the dplyr package you can avoid the index 'i' by using lag() inside of mutate(). E.g., > d |> mutate(AtoB = (lag(type)=="A" & type=="B")) time type AtoB 1 101 A FALSE 2 102 A FALSE 3 102 B TRUE 4 105 A FALSE 5 107 B TRUE 6 111 B FALSE 7 115 A FALSE -Bill On Tue, Jan 11, 2022 at 4:56 PM Jeff Reichman <reichm...@sbcglobal.net> wrote: > R-Help Forum > > > > Looking for a little guidance. Have an issue were I'm trying to determine > the time between when Event A happened(In days) to when a subsequent Event > B > happens. For Example at Time 1 Evat A happens and subsequently Event B > happens at the same day (0) and the next day (1) then Event A happens again > at time 4 and Event B happens the next day and 3 days later so on and so > forth. I gather there is no function that will do that so I suspect I will > need to grate so sour of do while loop? Any suggestions? > > > > > > Time Event_A Event_B Time_B > > 1 1 1 > 0 > > 2 0 1 > 1 > > 3 0 0 > 0 > > 4 1 0 > 0 > > 5 0 1 > 1 > > 6 0 0 > 0 > > 7 0 1 > 3 > > 8 1 1 > 0 > > 9 0 0 > 0 > > 10 0 1 > 2 > > > > > Jeff Reichman > > > [[alternative HTML version deleted]] > > ______________________________________________ > R-help@r-project.org mailing list -- To UNSUBSCRIBE and more, see > https://stat.ethz.ch/mailman/listinfo/r-help > PLEASE do read the posting guide > http://www.R-project.org/posting-guide.html > and provide commented, minimal, self-contained, reproducible code. > [[alternative HTML version deleted]] ______________________________________________ R-help@r-project.org mailing list -- To UNSUBSCRIBE and more, see https://stat.ethz.ch/mailman/listinfo/r-help PLEASE do read the posting guide http://www.R-project.org/posting-guide.html and provide commented, minimal, self-contained, reproducible code.