Нахождение заданного диапазона / интервалов с учетом времени начала и окончания (пакет data.table) - PullRequest
0 голосов
/ 29 июня 2018

Я пытаюсь создать временные интервалы для каждой строки данных с учетом времени начала и окончания. Например, учитывая время начала / окончания, я хотел бы создать соответствующий временной диапазон, показанный в другом столбце [правый столбец], который называется «временной диапазон». Цель состоит в том, чтобы разделить день на кварталы (0-6: 00,6-12: 00,12-18: 00,18-24: 00).

Person        Start Time            End Time            Time range
A             4/22/2018 8:58        4/22/2018 9:07      6:00-11:59 
B             4/19/2018 6:14        4/19/2018 6:20      6:00-11:59
C             4/18/2018 21:41       4/18/2018 22:03     18:00-23:59            

Я использую "data.table" package и загружаю файл csv с помощью file1 <- fread("Data.csv",sep = ","), поскольку файл может быть очень большим, и я слышал, что лучше использовать data.table для более быстрых вычислений; Однако у меня возникают проблемы с разделением времени начала и окончания для создания временных диапазонов. Для этого имеет значение только время начала. Спасибо

Ответы [ 2 ]

0 голосов
/ 29 июня 2018

Я не знаю ваш формат даты, поэтому я создал его как POSIXct. Это базовое решение R, а не data.table.

# sample data
df <- data.frame(Person = LETTERS[1:5], 
            start_time = as.POSIXct(c("4/22/2018 8:58", "4/19/2018 6:14", 
                         "4/18/2018 21:41", '5/17/2018 00:00', '7/17/2018 17:59'), 
                                    format = '%m/%d/%Y %H:%M'))

# extract hour from start_time and identify corresponding interval by dividing by 6
interval_id <- as.numeric(format(df$start_time, "%H")) %/% 6

# prepare and add time ranges
df$range <- c("00:00-05:59", "06:00-11:59", '12:00-17:59', '18:00-23-59')[interval_id+1]

#  Person          start_time       range
#1      A 2018-04-22 08:58:00 06:00-11:59
#2      B 2018-04-19 06:14:00 06:00-11:59
#3      C 2018-04-18 21:41:00 18:00-23-59
#4      D 2018-05-17 00:00:00 00:00-05:59
#5      E 2018-07-17 17:59:00 12:00-17:59
0 голосов
/ 29 июня 2018

Я предлагаю вам использовать data.table для импорта csv, а затем пакет lubridate для манипуляции датой / временем. Возможно, вам также следует указать, что у вас есть столбцы с переменными даты со значением yourdf$Start_Time<-as.Date(x,...). Если у вас все еще есть проблемы, дайте мне знать, как я могу вам помочь.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...