Получить длину последовательности

У меня есть столбец данных (45 000 строк!), Который представляет, когда фильтр работает или выключен (зависит от условий, показанных как ноль). файл журнала записывается следующим образом (фактически 2 столбца, первый из которых является счетчиком с начала)

col 1: 1,2,3,4,5,6,7,8,9,10.....45,000)
col 2: 1,2,3,4,0,0,0,0,1,2,3,4,5,6,7,8,9,10,11,12,0,0,0,0,0,0,0,0,1,2,3,0,0,0,0,0 etc.

То, что я хочу, это 2 столбца ("время включено" и "время выключено") с данными выше, это будет:

"time on" 4,0,12,0,3

(т.е. длины в порядке ненулевых последовательностей) и соответствующий

"time off" 0,4,0,8,5 

(длины числа нулей в порядке).

В конечном счете, я хочу создать гистограмму, показывающую дни, выходные дни со временем

1 ответ

Вы можете достичь этого с rle ("кодирование по длине прогона"):

x = c(1,2,3,4,0,0,0,0,1,2,3,4,5,6,7,8,9,10,11,12,0,0,
      0,0,0,0,0,0,1,2,3,0,0,0,0,0)
runs = rle(x != 0)
nonzero = runs$lengths
nonzero[! runs$values] = 0
nonzero
# Output:
# [1]  4  0 12  0  3  0
zeros = runs$lengths
zeros[runs$values] = 0
zeros
# Output:
# [1] 0 4 0 8 0 5
Другие вопросы по тегам