Более элегантный способ вернуть последовательность чисел на основе логических значений?
Вот пример логических значений, которые я имею как часть data.frame:
atest <- c(FALSE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, FALSE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, FALSE)
Я хочу вернуть последовательность чисел, начинающуюся с 1 от каждого FALSE и увеличивающуюся на 1 до следующего FALSE.
Результирующий желаемый вектор:
[1] 1 2 3 4 5 6 7 8 9 10 1 2 3 4 5 6 7 8 9 10 1
Вот код, который выполняет это, но я уверен, что есть более простой или более элегантный способ сделать это в R. Я всегда пытаюсь научиться кодировать вещи более эффективно в R, а не просто выполнять работу.
result <- c()
x <- 1
for(i in 1:length(atest)){
if(atest[i] == FALSE){
result[i] <- 1
x <- 1
}
if(atest[i] != FALSE){
x <- x+1
result[i] <- x
}
}