Я пытаюсь вычислить кумулятивные суммы вектора с элементами 0,1, NA, основываясь на следующих условиях:Условный cumsum на основе следующего значения вектора
1) Просто вычислить cumsums в между НС значения
2) Если 0 приходит после 1, то я хочу cumsum + 1
Out оригинальный вектор:
out[1:100]
[1] NA NA NA NA 0 1 1 NA NA NA 1 NA 0 NA 0 1 NA NA 0 NA 0 1 0 0 0 NA 0 1 0 1 0 0 1 0 1 1 0 0 0 0
[41] 1 0 NA 0 0 NA 1 NA 0 1 NA 0 NA 0 1 1 NA 1 NA 0 0 0 1 1 NA NA NA 0 0 NA 0 0 0 1 0 NA 1 0 NA 0
[81] 1 1 0 1 1 0 1 0 NA 0 1 0 1 0 NA 0 1 0 0 1
Я использовал этот код Calculat е cumsums Inbetween значений NA:
g <- cumsum(is.na(head(c(0, out), -1)))
out1 <- ave(out, g, FUN = cumsum)
Я получаю
out1[1:100]
[1] NA NA NA NA 0 1 2 NA NA NA 1 NA 0 NA 0 1 NA NA 0 NA 0 1 1 1 1 NA 0 1 1 2 2 2 3 3 4 5 5 5 5 5
[41] 6 6 NA 0 0 NA 1 NA 0 1 NA 0 NA 0 1 2 NA 1 NA 0 0 0 1 2 NA NA NA 0 0 NA 0 0 0 1 1 NA 1 1 NA 0
[81] 1 2 2 3 4 4 5 5 NA 0 1 1 2 2 NA 0 1 1 1 2
Теперь я просто есть проблема, что я хочу, чтобы получить cumsum + 1, если 1 следует ноль (и здесь только первые ноль)
eg
0 1 1 0 0 0 1 0 1 1 NA
с функцией у меня сейчас я хотел бы получить
0 1 2 2 2 2 3 3 4 5 NA, но то, что я хочу:
0 1 2 3 3 3 4 5 6 7 Н.
Может кто-нибудь помочь? Спасибо.
Большое вам спасибо, это работает отлично !!! – Pat
У меня есть другой вопрос: я хочу подмножить фрейм данных на основе вектора out1 (который имеет такую же длину, что и мой df), но только если у меня есть последовательность min 0-4. Я думал, что у меня уже есть код для этого, но я не понимаю. – Pat
@Pat Счастлив, что он работает и помогает дальше, но я не понимаю, что именно вы хотите выполнить (в основном, «последовательность min 0-4»). Могли бы вы изменить OP с примером/предполагаемым выходом? – konvas