Я пытаюсь найти правильное решение, чтобы создать переменную продолжительности, основанную на том, произошло какое-то событие или нет. Это очень просто сделать в цикле for, как
library(tidyverse)
df <- tibble(event = c(0,0,0,0,1,0,0,1,1,0,0,1))
df$dur <- NA
df$dur[1]<-0
for(i in 2:nrow(df)){
if(df$event[i]==0){
df$dur[i] <- df$dur[i-1]+1
}else{
df$dur[i] <- 0
}
}
print(df)
Однако я не могу найти аккуратное решение для этого. Я пытался использовать функцию накопления purrr, но это дает мне неправильный вывод
library(tidyverse)
df <- tibble(event = c(0,0,0,0,1,0,0,1,1,0,0,1))
df <- df %>% mutate(dur = case_when(event==1 ~ 0,
T~purrr::accumulate(event,~.x+1,.init=-1)[-1]))
print(df)
Любое предложение о том, как это сделать?