R - разбить временные ряды на столбцы в зависимости от дня недели - PullRequest
0 голосов
/ 26 октября 2018

У меня есть следующие временные ряды, показывающие 15-минутные штампы электроэнергии. Нагрузка на весь 2017 год:

-Datum & Zeit`        kWh            
Sun Jan-01-2017 01:45  374.420
Sun Jan-01-2017 02:00  355.040
Sun Jan-01-2017 02:15  359.995
Sun Jan-01-2017 02:30  375.715
Sun Jan-01-2017 02:45  371.520
Sun Jan-01-2017 03:00  355.100
Sun Jan-01-2017 03:15  411.780
Sun Jan-01-2017 03:30  417.330
Sun Jan-01-2017 03:45  401.555
Sun Jan-01-2017 04:00  362.180
Sun Jan-01-2017 04:15  361.605
Sun Jan-01-2017 04:30  366.155
Sun Jan-01-2017 04:45  363.785
....
...
Sun Dec-31-2017 23:45  363.785

Я хотел бы теперь преобразовать его в матрицу, которая выбирает только метки времени для конкретного рабочего дня (здесь воскресенье) и преобразует его в столбцы, чтобы я мог сравнить нагрузку на определенный день в течение года, это закончится в 52 столбца.

  Sun Jan-01-2017    Sun Jan-08-2017   ....  Sun Dec-31-2017 23:45   
01:45  374.420            ...                ....
02:00  355.040            ...                ....
02:15  359.995            ...                ....
02:30  375.715            ...                ....
02:45  371.520            ...                ....
03:00  355.100            ...                ....
03:15  411.780            ...                ....
03:30  417.330            ...                ....
03:45  401.555            ...                ....
04:00  362.180            ...                ....
04:15  361.605            ...                ....
04:30  366.155            ...                ....
04:45  363.785            ...                ....
05:00  335.880            ...                ....

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

Ответы [ 3 ]

0 голосов
/ 26 октября 2018

Как насчет такого решения, как:

0 голосов
/ 27 октября 2018

Мне пришлось использовать немного другой подход.

Каким-то образом, когда я использовал подход @david.«Ошибка: var должен вычислить одно число или имя столбца, а не список»

Далее он дал мне следующий вывод (2x53)

 Sun Jan-01-2017 01:45", "Sun Jan-01-2017 02:00", "Sun Jan-01-2017 02:15", ...
 SUN    74.420,             355.040,                359.995,               ....

Я создалдругой фрейм данных, где я разделил день недели, время, дату и kwh

 Weekday   Time     Date         kWh
 Sun       01:45    Jan-01-2017  74.420
 Sun       02:45    Jan-01-2017  355.040
 ....
 ..


dailys<- data.frame(Time,Weekday,Date,Load)
dailys

wide_data <- dailys %>% 
   filter(Weekday == "sun") %>% 
   spread(Time, kWh) %>% 
   select(-Date)

, где я получаю следующий вывод, который подходит довольно близко.

Weekday   Jan-01-2017   Jan-08-2017  Jan-015-2017 
Sun         4.420,        455.040,     789.995,
Sun          ...          ...         ...
Sun          ...          ...          ..
Sun
..
..

Теперь я обменял столбец Weekday_Column на метки времени (0:00; 00:15, 00:30, ..., 23:45), что, вероятно, не самый плавный способ сделать это?

0 голосов
/ 26 октября 2018

Это не воспроизводимый пример, но что бы я сделал перед форматированием этого набора данных как объекта временного ряда, я бы создал столбец, используя функцию wday () lubridate, а затем подставил бы фильтр () для дней, в которые вы бы хотел бы исключить. Кроме того, вам также нужно убедиться, что в POSIXct есть переменная даты и времени.

df <- mutate(df, wday= wday(TimeVar))
df.bizdays <- filter(df, wdat!= 1 & wday!=7)

Тогда я просто воссоздаю объект временного ряда из этого подмножества. Это также сделает ваши сезонности немного более сложными, поэтому я бы также рассмотрел объект msts () вместо ts (), особенно если вы хотите выполнить анализ на отметке ниже часа.

Надеюсь, это поможет!

...