Вот подход для преобразования времени в POSIXct
, cut
время с интервалами в 6 минут, затем count
.
Сначала необходимо указать год, месяц, день, час,минуты и секунды ваших данных.Это поможет масштабировать его на более крупные наборы данных.
library(tidyverse)
library(lubridate)
# sample data
d <- data.frame(t = paste0("2019-06-02 ",
c("0:03","0:06","0:09","0:12","0:15",
"0:18","0:21","0:24","0:27","0:30"),
":00"),
g = c("A","A","B","B","B"))
d$t <- ymd_hms(d$t) # convert to POSIXct with `lubridate::ymd_hms()`
Если вы проверите class
в вашем новом столбце даты, вы увидите, что это «POSIXct».
> class(d$t)
[1] "POSIXct" "POSIXt"
Теперь, когда данные находятся в «POSIXct», вы можете cut
их с минутными интервалами!Мы добавим этот новый фактор группировки как новый столбец с именем tc
.
d$tc <- cut(d$t, breaks = "6 min")
d
t g tc
1 2019-06-02 00:03:00 A 2019-06-02 00:03:00
2 2019-06-02 00:06:00 A 2019-06-02 00:03:00
3 2019-06-02 00:09:00 B 2019-06-02 00:09:00
4 2019-06-02 00:12:00 B 2019-06-02 00:09:00
5 2019-06-02 00:15:00 B 2019-06-02 00:15:00
6 2019-06-02 00:18:00 A 2019-06-02 00:15:00
7 2019-06-02 00:21:00 A 2019-06-02 00:21:00
8 2019-06-02 00:24:00 B 2019-06-02 00:21:00
9 2019-06-02 00:27:00 B 2019-06-02 00:27:00
10 2019-06-02 00:30:00 B 2019-06-02 00:27:00
Теперь вы можете group_by
этот новый интервал (tc
) и свой столбец группировки (g
), а также подсчитать частоту появления.Получение частоты наблюдений в группе является довольно распространенной операцией, поэтому dplyr
предоставляет count
для этого:
count(d, g, tc)
# A tibble: 7 x 3
g tc n
<fct> <fct> <int>
1 A 2019-06-02 00:03:00 2
2 A 2019-06-02 00:15:00 1
3 A 2019-06-02 00:21:00 1
4 B 2019-06-02 00:09:00 2
5 B 2019-06-02 00:15:00 1
6 B 2019-06-02 00:21:00 1
7 B 2019-06-02 00:27:00 2
Если вы запустите ?dplyr::count()
в консоли, вы увидите, что count(d, tc)
- это просто оболочка для group_by(d, g, tc) %>% summarise(n = n())
.