Преобразование многопараметрических, многогрупповых данных в объект TS - PullRequest
0 голосов
/ 11 февраля 2020

У меня есть объект tibble, имеющий несколько групп в столбце и переменные, зависящие от времени, в других столбцах. Я пытаюсь преобразовать это в объект ts.

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

DIVLEVEL4   Date    Sales   Cost
R   30.6.2018   279,0396819 33,48476183
R   31.3.2018   1656543,904 198785,2685
R   31.1.2018   3683,363612 442,0036334
R   31.1.2018   6434,16246  772,0994952
R   30.6.2018   30,70011316 3,684013579
A   31.3.2018   15101,69571 1812,203485
R   28.2.2018   2363,778089 283,6533707
R   31.5.2018   3863,311764 463,5974117
R   31.3.2018   87090,89559 10450,90747
R   31.5.2018   82564,35546 9907,722655
R   30.4.2018   71393,33929 8567,200715
R   30.4.2018   3543,333993 425,2000792
R   31.5.2018   5266,052788 631,9263346
R   31.1.2018   1761699,156 211403,8987
R   28.2.2018   126,0641971 15,12770365
R   28.2.2018   5080,899415 609,7079298
R   31.1.2018   3267,686071 392,1223285
R   30.6.2018   1808376,384 217005,1661
R   31.1.2018   78335,05219 9400,206263
R   28.2.2018   218880,0948 26265,61138
R   30.6.2018   4541,859592 545,023151
R   31.5.2018   62374,37761 7484,925313
R   30.4.2018   6927,553413 831,3064096
R   31.3.2018   5486,452873 658,3743448
R   28.2.2018   79677,19588 9561,263506
R   30.4.2018   199783,293  23973,99516
R   31.5.2018   2587,801823 310,5362188
A   28.2.2018   14519,7136  1742,365632
R   31.3.2018   115484,1636 13858,09963
R   31.3.2018   213,7964071 25,65556885
R   31.1.2018   4863,71885  583,646262
R   31.5.2018   26335,57824 3160,269389
R   30.4.2018   3143,861929 377,2634315
R   31.3.2018   79674,12633 9560,89516
R   31.5.2018   1542191,744 185063,0093
R   28.2.2018   1606610,664 192793,2797
R   31.5.2018   83,61105675 10,03332681
R   30.6.2018   220412,3576 26449,48291
R   31.1.2018   237432,0521 28491,84625
R   30.4.2018   86683,24446 10401,98934
R   28.2.2018   103523,9084 12422,86901
R   31.5.2018   217778,0876 26133,37051
R   30.6.2018   75493,35187 9059,202224
R   30.4.2018   23314,76204 2797,771445
R   30.6.2018   106981,3073 12837,75688
R   30.4.2018   4739,107287 568,6928744
R   30.6.2018   17640,08684 2116,810421
A   30.6.2018   12369,53103 1484,343724
R   30.4.2018   88070,29803 10568,43576
R   28.2.2018   85922,79601 10310,73552
R   28.2.2018   4116,664156 493,9996987
R   31.5.2018   5086,447528 610,3737034
R   30.6.2018   7534,892277 904,1870732
R   31.1.2018   67,49549179 8,099459015
R   31.1.2018   120281,8324 14433,81989
R   30.4.2018   1481159,672 177739,1606
R   30.4.2018   14,96676269 1,796011523
A   30.4.2018   11265,0625  1351,8075
R   31.1.2018   114562,3692 13747,4843
R   31.3.2018   5139,063183 616,687582
R   30.6.2018   4094,000594 491,2800713
R   31.1.2018   20397,0328  2447,643936
R   31.3.2018   219460,8671 26335,30405
A   31.1.2018   17581,37066 2109,764479
R   30.6.2018   89022,18097 10682,66172
A   31.5.2018   10138,00115 1216,560138
R   30.6.2018   2813,713577 337,6456292
R   31.5.2018   91834,59339 11020,15121
R   31.3.2018   14279,52208 1713,54265
R   31.3.2018   3586,275344 430,3530413
R   30.4.2018   71,77213351 8,612656021
R   28.2.2018   6241,624886 748,9949863
R   31.3.2018   2167,614897 260,1137876
R   28.2.2018   12270,68227 1472,481872

Эти данные сохраняются как as.tibble(), а затем я пробую простой as.ts(), чтобы увидеть, работает ли это, но это не так. Я знаю, что это не так просто, но мое начинающее понимание R все еще ограничивает. Некоторое руководство о том, как я могу обойти это, будет оценено.

Спасибо!

1 Ответ

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

Существует некоторый вопрос о том, является ли объект ts уместным здесь в первую очередь, но оставляя в стороне это примечание, что вы не можете просто использовать as.ts на том, что у вас есть, потому что оно не в форме времени серии. Что вы можете сделать, это использовать read.zoo, чтобы преобразовать и прочитать его одновременно.

Используя файл, созданный в примечании в конце, прочитайте его в объект зоопарка z. (В качестве альтернативы, если он уже есть во фрейме данных DF, используйте read.zoo(DF, ...) вместо read.zoo("test_file.dat", ...).) Затем либо используйте этот объект зоопарка напрямую, либо преобразуйте его в ts, используя as.ts(z), теперь, когда он находится в соответствующая форма.

Обратите внимание, что мы взяли среднее значение дубликатов индексов в группе, но вы можете использовать любую подходящую функцию в зависимости от того, что вы хотите. Кроме того, поскольку данные представляют собой даты конца месяца, мы использовали класс yearmon для индекса, чтобы обеспечить регулярное размещение данных.

Для получения дополнительной информации см. Справочное руководство (файлы справки) и виньетки (документы в формате pdf) в пакете .

library(zoo)

z <- read.zoo("test_file.dat", header = TRUE, split = 1, index = 2, 
  FUN = as.yearmon, format = "%d.%m.%Y", dec = ",", aggregate = mean)

:

> z
          Sales.A   Cost.A  Sales.R   Cost.R
Jan 2018 17581.37 2109.764 213729.4 25647.53
Feb 2018 14519.71 1742.366 193164.9 23179.79
Mar 2018 15101.70 1812.203 199011.5 23881.38
Apr 2018 11265.06 1351.807 164070.4 19688.45
May 2018 10138.00 1216.560 185451.5 22254.17
Jun 2018 12369.53 1484.344 194768.3 23372.20

Примечание

Lines <- "DIVLEVEL4   Date    Sales   Cost
R   30.6.2018   279,0396819 33,48476183
R   31.3.2018   1656543,904 198785,2685
R   31.1.2018   3683,363612 442,0036334
R   31.1.2018   6434,16246  772,0994952
R   30.6.2018   30,70011316 3,684013579
A   31.3.2018   15101,69571 1812,203485
R   28.2.2018   2363,778089 283,6533707
R   31.5.2018   3863,311764 463,5974117
R   31.3.2018   87090,89559 10450,90747
R   31.5.2018   82564,35546 9907,722655
R   30.4.2018   71393,33929 8567,200715
R   30.4.2018   3543,333993 425,2000792
R   31.5.2018   5266,052788 631,9263346
R   31.1.2018   1761699,156 211403,8987
R   28.2.2018   126,0641971 15,12770365
R   28.2.2018   5080,899415 609,7079298
R   31.1.2018   3267,686071 392,1223285
R   30.6.2018   1808376,384 217005,1661
R   31.1.2018   78335,05219 9400,206263
R   28.2.2018   218880,0948 26265,61138
R   30.6.2018   4541,859592 545,023151
R   31.5.2018   62374,37761 7484,925313
R   30.4.2018   6927,553413 831,3064096
R   31.3.2018   5486,452873 658,3743448
R   28.2.2018   79677,19588 9561,263506
R   30.4.2018   199783,293  23973,99516
R   31.5.2018   2587,801823 310,5362188
A   28.2.2018   14519,7136  1742,365632
R   31.3.2018   115484,1636 13858,09963
R   31.3.2018   213,7964071 25,65556885
R   31.1.2018   4863,71885  583,646262
R   31.5.2018   26335,57824 3160,269389
R   30.4.2018   3143,861929 377,2634315
R   31.3.2018   79674,12633 9560,89516
R   31.5.2018   1542191,744 185063,0093
R   28.2.2018   1606610,664 192793,2797
R   31.5.2018   83,61105675 10,03332681
R   30.6.2018   220412,3576 26449,48291
R   31.1.2018   237432,0521 28491,84625
R   30.4.2018   86683,24446 10401,98934
R   28.2.2018   103523,9084 12422,86901
R   31.5.2018   217778,0876 26133,37051
R   30.6.2018   75493,35187 9059,202224
R   30.4.2018   23314,76204 2797,771445
R   30.6.2018   106981,3073 12837,75688
R   30.4.2018   4739,107287 568,6928744
R   30.6.2018   17640,08684 2116,810421
A   30.6.2018   12369,53103 1484,343724
R   30.4.2018   88070,29803 10568,43576
R   28.2.2018   85922,79601 10310,73552
R   28.2.2018   4116,664156 493,9996987
R   31.5.2018   5086,447528 610,3737034
R   30.6.2018   7534,892277 904,1870732
R   31.1.2018   67,49549179 8,099459015
R   31.1.2018   120281,8324 14433,81989
R   30.4.2018   1481159,672 177739,1606
R   30.4.2018   14,96676269 1,796011523
A   30.4.2018   11265,0625  1351,8075
R   31.1.2018   114562,3692 13747,4843
R   31.3.2018   5139,063183 616,687582
R   30.6.2018   4094,000594 491,2800713
R   31.1.2018   20397,0328  2447,643936
R   31.3.2018   219460,8671 26335,30405
A   31.1.2018   17581,37066 2109,764479
R   30.6.2018   89022,18097 10682,66172
A   31.5.2018   10138,00115 1216,560138
R   30.6.2018   2813,713577 337,6456292
R   31.5.2018   91834,59339 11020,15121
R   31.3.2018   14279,52208 1713,54265
R   31.3.2018   3586,275344 430,3530413
R   30.4.2018   71,77213351 8,612656021
R   28.2.2018   6241,624886 748,9949863
R   31.3.2018   2167,614897 260,1137876
R   28.2.2018   12270,68227 1472,481872"
cat(Lines, file = "test_file.dat")
...