Временные ряды в R (ColumnSorting) - PullRequest
0 голосов
/ 28 мая 2020

У меня есть csv входных данных в реальном времени с отметками времени, и я хочу сгруппировать эти данные во временные ряды продолжительностью 30 минут для анализа.

Образец данных в реальном времени:

Date:  
2019-06-01 08:03:04  
2019-06-01 08:20:04  
2019-06-01 08:33:04  
2019-06-01 08:54:04  
...

Я хочу сгруппировать их в таблицу с шагом 30 минут (т.е. 08:30, 09:00, et c ..), чтобы узнать количество появлений в течение каждого периода. Я создал новый файл csv для доступа через R. Это сделано для того, чтобы не повредить форматирование исходного набора данных.

Date:  
2019-06-01 08:00  
2019-06-01 08:30  
2019-06-01 09:00  
2019-06-01 09:30  

Сначала я составил список 30-минутных интервалов:

sheet_csv$Date <- as.POSIXct(paste(sheet_csv$Date), format = "%Y-%m-%d %H:%M", tz = "GMT") #to change to POSIXct
sheet_csv$Date <- timeDate::timeSequence(from = "2019-06-01 08:00", to = "2019-12-03 09:30", by = 1800,
                           format = "%Y-%m-%d %H:%M", zone = "GMT") 

Я обнаружил ошибку "Error in x[[idx]][[1]] : this S4 class is not subsettable" для этого интервала.

Я относительно новичок в R. Пожалуйста, помогите, где можете. Очень признателен.

1 Ответ

0 голосов
/ 29 мая 2020

Вам, вероятно, не понадобится пакет timeDate для чего-то вроде этого. Один пакет, который очень полезен для управления датами и временем, - это lubridate - вы можете подумать о дальнейшем продвижении.

Я использовал ваш пример и добавил другую дату / время для иллюстрации.

To создайте свои 30-минутные интервалы, вы можете использовать cut и seq.POSIXt, чтобы создать последовательность даты / времени с 30-минутными перерывами. Я использовал вашу минимальную дату / время для начала (округление до ближайшего часа), но вы также можете указать здесь другую дату / время.

Использование table даст вам частоты после cut.

sheet_csv <- data.frame(
  Date = c("2019-06-01 08:03:04", 
           "2019-06-01 08:20:04", 
           "2019-06-01 08:33:04", 
           "2019-06-01 08:54:04", 
           "2019-06-01 10:21:04")
)

sheet_csv$Date <- as.POSIXct(sheet_csv$Date, format = "%Y-%m-%d %H:%M:%S", tz = "GMT")

as.data.frame(table(cut(sheet_csv$Date, 
                        breaks = seq.POSIXt(from = round(min(sheet_csv$Date), "hours"), 
                                     to = max(sheet_csv$Date) + .5 * 60 * 60, 
                                     by = "30 min"))))

Выход

                 Var1 Freq
1 2019-06-01 08:00:00    2
2 2019-06-01 08:30:00    2
3 2019-06-01 09:00:00    0
4 2019-06-01 09:30:00    0
5 2019-06-01 10:00:00    1
...