Среднесуточное значение временного ряда, полученное из месячных данных R monthdays () - PullRequest
0 голосов
/ 11 апреля 2020

У меня есть объект временного ряда тс. Я упомянул весь объект здесь. Имеются данные за период с января 2013 года по декабрь 2017 года за все годы. Я пытаюсь найти среднесуточное значение , чтобы это значение делилось на количество дней в месяце.

Ожидаемый результат

Первое значение для января 2013 года в тс - 23770, я хочу, чтобы оно было 23770/31, где 31 - количество дней в январе, второе значение для февраля 2013 года - 23482. Я хочу, чтобы значение было 23482/28, поскольку 28 было количество дней в феврале 2013 года и т. д.

До сих пор пробовали:

Я знаю, monthdays() может это сделать. Что-то вроде ts/monthdays() .Monthdays () возвращает количество дней в месяце. Я не могу реализовать это здесь. Прочитайте об этом tapply где-нибудь, но он не дает мне желаемого результата, так как мне нужны значения, соответствующие каждой комбинации года и месяца.

    ts
    Jan   Feb   Mar   Apr   May   Jun   Jul   Aug    Sep   Oct   Nov   Dec
2013 23770 23482 23601 22889 23401 24240 23873 23647  23378 23871 22624 23496
2014 26765 27619 26341 27320 27389 27418 26874 27005  27538 26324 27267 27583
2015 28354 27452 28336 28998 28595 28338 27806 28660  27226 28317 28666 28574
2016 30209 30659 31554 30248 30358 31091 30389 30247 31227 31839 30602 30609
2017 32180 32203 31639 31784 32375 30856 31863 32827 32506 31702 31681 32176

 > cycle(ts_actual_group2)
     Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec
2013   1   2   3   4   5   6   7   8   9  10  11  12
2014   1   2   3   4   5   6   7   8   9  10  11  12
2015   1   2   3   4   5   6   7   8   9  10  11  12
2016   1   2   3   4   5   6   7   8   9  10  11  12
2017   1   2   3   4   5   6   7   8   9  10  11  12

Использование tapply, так как я прочитал его, но это не дает желаемого результата

tapply(ts_actual_group2, cycle(ts_actual_group2), mean)
      1       2       3       4       5       6       7    8       9      10      11      12
28255.6 28283.0 28294.2 28247.8 28423.6 28388.6 28161.0 28477.2 28375.0 28410.6 28168.0 28487.6 

1 Ответ

0 голосов
/ 11 апреля 2020

Я не могу реализовать это здесь.

Я не уверен, почему вы не смогли. Функция monthdays из пакета прогноз применительно к объекту ts возвращает количество дней в каждом месяце ряда. Возвращаемый объект - это временной ряд того же измерения, что и входные данные. Таким образом, вы можете просто разделить их.

library(forecast)

ts/monthdays(ts)

Jan       Feb       Mar       Apr       May       Jun       Jul 
2013  766.7742  838.6429  761.3226  762.9667  754.8710  808.0000
2014  863.3871  986.3929  849.7097  910.6667  883.5161  913.9333
2015  914.6452  980.4286  914.0645  966.6000  922.4194  944.6000
2016  974.4839 1057.2069 1017.8710 1008.2667  979.2903 1036.3667
2017 1038.0645 1150.1071 1020.6129 1059.4667 1044.3548 1028.5333

monthsdays(ts)  # Accepts a time-series object
     Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec
2013  31  28  31  30  31  30  31  31  30  31  30  31
2014  31  28  31  30  31  30  31  31  30  31  30  31
2015  31  28  31  30  31  30  31  31  30  31  30  31
2016  31  29  31  30  31  30  31  31  30  31  30  31
2017  31  28  31  30  31  30  31  31  30  31  30  31
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...