Присвоение индексных номеров времени

#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')