получить длину последовательности - PullRequest
0 голосов
/ 18 декабря 2018

У меня есть столбец данных (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 Ответ

0 голосов
/ 18 декабря 2018

Этого можно добиться с помощью 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
...