Увеличение на 1 в логическом векторе

#r

#r

Вопрос:

У меня есть логический вектор do_it = c(FALSE, TRUE, FALSE, TRUE, TRUE)

Я хочу, чтобы истинные значения увеличивались на 1, а выходные данные должны быть c(0, 1, 0, 2, 3)

Ответ №1:

Вы можете взять cumsum вектор и умножить его на себя, чтобы сохранить FALSE значения равными 0.

 do_it = c(FALSE, TRUE, FALSE, TRUE, TRUE)
cumsum(do_it) * do_it
#[1] 0 1 0 2 3
 

Вы также можете использовать replace :

 replace(cumsum(do_it), !do_it, 0)