Предоставление индексов времени - PullRequest
0 голосов
/ 24 апреля 2019

У меня есть столбец времени

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

Ответы [ 2 ]

2 голосов
/ 24 апреля 2019

Еще одна забавная идея,

cumsum(c(1, diff(strptime(a, format = "%T")) / 15))
#[1]  1  2  8 96
1 голос
/ 24 апреля 2019

Мы можем использовать 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')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...