временные метки со значениями, определяющими посещение и продолжительность посещения - PullRequest
0 голосов
/ 10 февраля 2020

В настоящее время я работаю с набором данных, содержащим сенсорные данные. Я sh, чтобы получить сводную статистику. Точнее я получу sh, чтобы узнать количество посещений и общую продолжительность занятия. Одно посещение определяется, если есть несколько значений 0 на протяжении X минут после отметки времени, имеющей значение 1

мои данные выглядят следующим образом

SensorId          timestamp          value
1                 10:10:10            1
1                 10:12:10            1
1                 10:14:00            1
1                 10:16:00            0
1                 10:18:00            0
1                 10:20:00            0
2                 13:10:10            1
2                 13:12:10            1
2                 13:14:00            1
2                 13:20:00            1
2                 13:22:00            0

это мой желаемый результат:

SensorId          total time in use          Number of visits
1                 4                             1
2                 10                            1

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

1 Ответ

0 голосов
/ 11 февраля 2020

Мы можем преобразовать timestamp в POSIXct класс, arrange их, сгруппировать их по SensorId и последовательно схожие value и взять вычитание last timestamp с first единицей.

library(dplyr)

df %>%
 mutate(timestamp = as.POSIXct(timestamp, format = "%T")) %>%
 arrange(SensorId, timestamp) %>%
 group_by(SensorId, grp = data.table::rleid(value)) %>%
 summarise(total_time = round(last(timestamp) - first(timestamp)), 
           number_of_visit = first(value)) %>%
 filter(number_of_visit == 1) %>%
 select(-grp)

#  SensorId total_time number_of_visit
#     <int> <drtn>               <int>
#1        1  4 mins                  1
#2        2 10 mins                  1
...