#r #indexing #time
#r #индексирование #время
Вопрос:
У меня есть столбец времени
a = times('00:00:00', '00:15:00', '01:45:00', '23:45:00')
И я хотел бы присвоить им индекс, основанный на 15-минутном интервале. Так, например, 00:00:00 будет равно 1, 00:15:00 будет равно 2, а 23:45:00 будет равно 96, поскольку в 24-часовом периоде имеется девяносто шесть 15-минутных интервалов.
Итак, результат, который я хочу, это:
1 2 8 96
Комментарии:
1. что такое
times
?2. Может быть из lubridate пакета?
3. @zx8754 Это тоже было моим первым предположением, но нет
Ответ №1:
Еще одна забавная идея,
cumsum(c(1, diff(strptime(a, format = "%T")) / 15))
#[1] 1 2 8 96
Ответ №2:
Мы можем использовать cut
with breaks
of "15 mins"
после преобразования a
в объект time и преобразовать уровни в числовые.
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')