Подсчет интервалов в R - PullRequest
       0

Подсчет интервалов в R

0 голосов
/ 01 апреля 2020

Я работаю с некоторыми SQL данными, отслеживающими состояние работы насосов. Состояние работы насоса равно 0 или 1 (0 = не работает, 1 = работает). В результате получается график, который выглядит следующим образом:

Циклы насоса

Как можно считать последовательные циклы работы (т. Е. Плато) как один цикл?

Таблица SQL выглядит следующим образом:

Timestamp                    Pump Run Status
2020-03-30 6:00:00 UTC       0
2020-03-30 6:01:00 UTC       1
2020-03-30 6:02:00 UTC       1
2020-03-30 6:03:00 UTC       0
2020-03-30 6:04:00 UTC       0

Следует отметить, что время не всегда разделяется одной минутой. Иногда это полторы минуты, иногда это может быть несколько минут. Поэтому я не думаю, что решение с разницей во времени сработает.

Я попытался суммировать все 1, но, очевидно, это всего лишь подсчет времени работы насосов, а не циклов. Другой вариант, о котором я подумал, - это использовать что-то вроде l oop. В псевдокоде это будет выглядеть примерно так:

for each row:
   if run status != run status in next row:
      increment counter
counter / 2

Я думаю, это будет учитываться при каждом изменении состояния запуска. Но есть ли векторное решение, о котором я не думаю?

Спасибо.

1 Ответ

1 голос
/ 01 апреля 2020

с использованием пакета data.table:

library(data.table)

# assuming Your_Data$Pump_Run_Status<-c(0,0,0,0,1,1,1,0,0,0,0,1,1,1,1,0,0,0)

Your_Data<-data.table(Your_Data)
setDT(Your_Data)[, .(value = Pump_Run_Status[1L], n = .N), .(grp = rleid(Pump_Run_Status))]


# result:

   grp value n
1:   1     0 4
2:   2     1 3
3:   3     0 4
4:   4     1 4
5:   5     0 3

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...