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