Как подсчитать количество уникальных меток, принадлежащих одному конкретному столбцу, относительно отметки времени с интервалом в x минут?

Мой набор данных выглядит так:

Как подсчитать количество уникальных меток, принадлежащих одному конкретному столбцу, относительно отметки времени с интервалом в x минут?

Позвольте мне объяснить мой фрейм данных. У меня есть два столбца с именами «отметка времени» и «метка». Столбец «метка» содержит уникальное количество значений, возникших по отношению к столбцу «отметка времени».

Я могу найти количество вхождений уникальных переменных в столбце метка за все время, используя функцию агрегирования и подсчета, доступную в R.

Но теперь я хочу подсчитать количество появлений уникальных переменных в столбце метка относительно отметка времени с интервалом в 2 минуты.

Чтобы быть точным, это то, что я ищу в своем выводе:

Как подсчитать количество уникальных меток, принадлежащих одному конкретному столбцу, относительно отметки времени с интервалом в x минут?

Вы можете найти фрейм данных здесь, используя dput в R.

x <- data.frame(timeStamp = c("20:12:14","20:12:14","20:13:02","20:13:02","20:13:55","20:13:55","20:14:14","20:14:14","20:14:25","20:14:26","20:14:26","20:14:26","20:15:26","20:15:28","20:15:36","20:15:37","20:16:41","20:16:49","20:17:20","20:17:21"), label = c("003_T04_Ward Login","003_T04_Ward Login","002_T05_SearchPatient","002_T05_SearchPatient","003_T04_Ward Login","003_T04_Ward Login","002_T05_SearchPatient","002_T05_SearchPatient","001_T09_Submit Payment","001_T09_Submit Payment","001_T09_Submit Payment","001_T09_Submit Payment","002_T05_SearchPatient","002_T05_SearchPatient","003_T04_Ward Login","003_T04_Ward Login","002_T05_SearchPatient","002_T05_SearchPatient","003_T04_Ward Login","003_T04_Ward Login"
))
dput(x)

Покажите небольшой воспроизводимый пример с использованием dput вместо изображений

akrun 13.04.2018 08:16

Я не могу найти желаемый результат, поэтому я разместил изображение того, что должно понравиться моему выводу. Вы можете мне в этом помочь?

Soyam Maharathy 13.04.2018 08:21

Мы не можем копировать изображения для тестирования. По этой причине мы запрашиваем dput.

akrun 13.04.2018 08:22

Спасибо, arkun, я предоставил небольшой воспроизводимый пример с использованием dput. Вы можете проверить его выше.

Soyam Maharathy 13.04.2018 09:02
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
4
245
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вот решение tidyverse:

# Create 2 min breakpoints by which we group times
hm <- function(x) as.POSIXct(x, format = "%H:%M")
breaks <- seq(min(hm(x$timeStamp)), max(hm(x$timeStamp)) + 120, by = '2 min');

library(tidyverse);
x %>%
    mutate(
        timeStamp = cut(hm(timeStamp), breaks = breaks)) %>%
    count(timeStamp, label) %>%
    spread(label, n)
## A tibble: 3 x 4
#  timeStamp           `001_T09_Submit Pa… `002_T05_SearchPat… `003_T04_Ward Lo…
#  <fct>                             <int>               <int>             <int>
#1 2018-04-13 20:12:00                  NA                   2                 4
#2 2018-04-13 20:14:00                   4                   4                 2
#3 2018-04-13 20:16:00                  NA                   2                 2

Объяснение: Мы создаем 2-минутные точки останова, с помощью которых мы cut составляем час + минута timeStamp; затем count на 2 минуты сгруппированы по времени и помечаются, и распространяются от длинного до широкого.


Пример данных

x <- data.frame(
    timeStamp = c("20:12:14","20:12:14","20:13:02","20:13:02","20:13:55","20:13:55","20:14:14","20:14:14","20:14:25","20:14:26","20:14:26","20:14:26","20:15:26","20:15:28","20:15:36","20:15:37","20:16:41","20:16:49","20:17:20","20:17:21"), 
    label = c("003_T04_Ward Login","003_T04_Ward Login","002_T05_SearchPatient","002_T05_SearchPatient","003_T04_Ward Login","003_T04_Ward Login","002_T05_SearchPatient","002_T05_SearchPatient","001_T09_Submit Payment","001_T09_Submit Payment","001_T09_Submit Payment","001_T09_Submit Payment","002_T05_SearchPatient","002_T05_SearchPatient","003_T04_Ward Login","003_T04_Ward Login","002_T05_SearchPatient","002_T05_SearchPatient","003_T04_Ward Login","003_T04_Ward Login" ))

Другие вопросы по теме