Я играю с двоичными данными.
У меня есть тестовые данные в столбцах следующим образом:
A B C D E F G H I J K L M N
-----------------------------------------------------
1 1 1 1 1 1 1 1 1 0 0 0 0 0
0 0 0 0 1 1 1 0 1 1 0 0 1 0
1
isпоказывая, что система была включена, и 0
, указывая, что система была выключена.
У меня есть способ найти способ суммировать разрывы между вкл / выкл переход этих систем.
Например:
для первого ряда, перестает работать после I
для второго ряда, он работает с E
до G
, а затем снова работает в I
и M
, но выключается во время других.
Я вижу свой результат в следующей форме (table1
)
row-number value grp_num num Range
------------ ----- -------- ------ ------
1 1 1 9 A-I
1 0 2 5 J-N
2 0 1 4 A-D
2 1 2 3 E-G
2 0 3 1 H-H
2 1 4 2 I-J
2 0 5 2 K-L
2 1 6 1 M-M
2 0 7 1 N-N
Я использовал следующий код:
table1 <- test[,-c(1)] %>%
rownames_to_column() %>%
gather(col,val,-rowname) %>%
group_by(rowname) %>%
mutate(grp_num = cumsum(val != lag(val, default = -99))) %>%
group_by(rowname,val,grp_num) %>%
dplyr::summarise(num = n(),
range = paste0(first(col), "-", last(col)))
Мой вопрос здесь, если в моих данных были пустые записи,Как я могу исключить их из группы.
A B C D E F G H I J K L M N
-----------------------------------------------------
1 1 1 1 1 1 1 1 0 0 0 0 0
1 1 1 0 1 1 0 0 1 0
Ожидаемый результат очень похож, но исключая пустые значения
row-number value grp_num num Range
------------ ----- -------- ------ ------
1 1 1 8 B-I
1 0 2 5 J-N
2 1 1 3 E-G
2 0 2 1 H-H
2 1 3 2 I-J
2 0 4 2 K-L
2 1 5 1 M-M
2 0 6 1 N-N