Подтвердить что ты не робот

Как я могу подсчитать прогоны в последовательности?

В R, какой был бы самый эффективный/простой способ подсчета прогонов идентичных элементов в последовательности?

Например, как подсчитать числа последовательных нулей в последовательности неотрицательных целых чисел:

x <- c(1,0,0,0,1,0,0,0,0,0,2,0,0) # should give 3,5,2
4b9b3361

Ответ 1

Используйте rle():

y <- rle(c(1,0,0,0,1,0,0,0,0,0,2,0,0))
y$lengths[y$values==0]

Ответ 2

Это можно сделать эффективным способом, используя индексы, где значения меняются:

x <- c(1,0,0,0,1,2,1,0,0,1,1)

Найдите, где значения меняются:

diffs <- x[-1L] != x[-length(x)]

Получить индексы, а затем получить разницу в последующих индексах:

idx <- c(which(diffs), length(x))
diff(c(0, idx))