Как я могу классифицировать столбец метки времени с интервалом в 2 часа в R?

#r #dataframe

Вопрос:

Мне нужно классифицировать столбец, в котором дата является полем даты и времени (меткой времени), как показано на рисунке ниже:

введите описание изображения здесь

Для этого мне нужно создать новый столбец в моем фрейме данных для получения новых данных, где результатом будет столбец, классифицированный с интервалом 2 часа, как на изображении выше.

Результат:

введите описание изображения здесь

Как я могу это сделать?

Ответ №1:

Вы можете использовать floor_date / ceiling_date из lubridate

 library(dplyr)
library(lubridate)

df <- data.frame(time = Sys.time()   sample(100000, 10))

df %>%
  mutate(interval = hour(floor_date(time, '2 hours')), 
         interval1 = paste(interval, interval   2, sep = '-'), 
         interval2 = sprintf('[%d, %d)', interval, interval   2, sep = '-'))

#                  time interval interval1 interval2
#1  2021-06-07 13:14:15       12     12-14  [12, 14)
#2  2021-06-07 14:57:42       14     14-16  [14, 16)
#3  2021-06-06 23:42:58       22     22-24  [22, 24)
#4  2021-06-07 07:11:57        6       6-8    [6, 8)
#5  2021-06-08 01:20:38        0       0-2    [0, 2)
#6  2021-06-07 17:51:25       16     16-18  [16, 18)
#7  2021-06-07 16:15:47       16     16-18  [16, 18)
#8  2021-06-07 11:29:56       10     10-12  [10, 12)
#9  2021-06-07 16:59:13       16     16-18  [16, 18)
#10 2021-06-07 11:47:07       10     10-12  [10, 12)
 

Комментарии:

1. Эй, @Ronak Shah, я пытаюсь понять код. Я вижу, что вы создаете образец для использования в df. В моем случае я должен использовать df[‘InvoiceDate’], верно?

2. Верно. df это имя фрейма данных и имя столбца для меня. time Замените его в соответствии с вашими данными. Так time что будет заменено на InvoiceDate для вас.

3. Я создаю свой столбец datetime и использовал его для применения преобразования: rt_final['IntervalH'] <- rt_final$InvoiceDate rt_final %>% mutate(interval = hour(floor_date(rt_final$IntervalH, '2 hours')), interval1 = paste(interval, interval 2, sep = '-'), interval2 = sprintf('[%d, %d]', interval, interval 2, sep='-')) rt_final['IntervalH'] Но происходит ошибка: ` » Предупреждающее сообщение: Проблема со mutate() столбцом interval2 . ℹ interval2 = sprintf("[%d, %d]", interval, interval 2, sep = "-") . ℹ один аргумент, не используемый форматом ‘[%d, %d]’ «

4. @EricGomes Вы используете немного другой код. Можете ли вы попробовать rt_final <- rt_final %>% mutate(intervalH = hour(floor_date(InvoiceDate, '2 hours')), intervalH = sprintf('[%d, %d)', intervalH, intervalH 2))

5. Спасибо @Ronak Shah, ты мне очень помогаешь!