Мы можем использовать cut
с breaks
из "15 mins"
после преобразования a
в объект времени и преобразования уровней в числовые.
as.integer(cut(strptime(a, format = "%T"), breaks = "15 mins"))
#[1] 1 2 8 96
То же самое будет работать с as.POSIXct
as.integer(cut(as.POSIXct(a, format = "%T"), breaks = "15 mins"))
Используя lubridate
, мы можем преобразовать в секунды и сделать
library(lubridate)
period_to_seconds(hms(a))/(15*60) + 1
Или с minute
minute(as.period(hms(a), "minutes"))/15 + 1
Возможно, вам потребуется ceiling
/ floor
в зависимости от продолжительности округления значений.
данные
a <- c('00:00:00', '00:15:00', '01:45:00', '23:45:00')