Как разделить месячные итоги на сезонное месячное соотношение в R - PullRequest
0 голосов
/ 30 января 2019

Я пытаюсь десезонизировать свои данные, деля мои месячные итоги на среднее соотношение сезонности за этот месяц.У меня есть два кадра данных.средняя сезонность, которая имеет 12 рядов среднего коэффициента сезонности в месяц.Проблема заключается в том, что отношение сезонности - это отношение каждого усредненного месяца, содержащего только 12 строк, а фрейм данных итогового заказа содержит 147 строк.

deseasonlize <- transform(avgseasonalityratio, deseasonlizedtotal = 
df1$OrderTotal / avgseasonality$seasonalityratio)

Это выполняется, но не соотносит месяцы надлежащим образом.Он использует первое соотношение апреля и запускает его по первому итоговому заказу за декабрь.

> avgseasonality
       Month seasonalityratio
1      April        1.0132557
2     August        1.0054602
3   December        0.8316988
4   February        0.9813396
5    January        0.8357475
6       July        1.1181648
7       June        1.0439899
8      March        1.1772450
9        May        1.0430667
10  November        0.9841149
11   October        0.9595041
12 September        0.8312318

> df1
# A tibble: 157 x 3
 DateEntLabel        OrderTotal `d$Month`
  <dttm>                   <dbl> <chr>    
 1 2005-12-01 00:00:00    512758. December 
 2 2006-01-01 00:00:00    227449. January  
 3 2006-02-01 00:00:00    155652. February 
 4 2006-03-01 00:00:00    172923. March    
 5 2006-04-01 00:00:00    183854. April    
 6 2006-05-01 00:00:00    239689. May      
 7 2006-06-01 00:00:00    237638. June     
 8 2006-07-01 00:00:00    538688. July     
 9 2006-08-01 00:00:00    197673. August   
10 2006-09-01 00:00:00    144534. September
# ... with 147 more rows

Мне нужны итоговые и порядковые итоги каждого месяца соответственно.Расчеты для каждого месяца, соответственно, будут такими, как (декабрь) 512758 / 0.8316988 = 616518.864762 Выходные данные для вычислений будут в их новом столбце, который соответствует месяцу и итоговой сумме заказа.Пожалуйста, любая помощь с благодарностью!

1 Ответ

0 голосов
/ 30 января 2019

Самый простой способ - сначала merge() ваши данные, а затем выполнить операцию.Вы можете использовать функцию R base merge(), хотя я покажу здесь, используя функцию tidyverse left_join().Я вижу, что у одного из ваших столбцов есть странное имя d$Month, переименование этого в Месяц упростит объединение!

Воспроизводимый пример:

library(tidyverse)
df_1 <-  data.frame(Month = c("Jan", "Feb"), seasonalityratio = c(1,2))
df_2 <-  data.frame(Month = rep(c("Jan", "Feb"),each=2), OrderTotal = 1:4)


df_1 %>% 
  left_join(df_2, by = "Month") %>% 
  mutate(eseasonlizedtotal = OrderTotal / seasonalityratio)
#>   Month seasonalityratio OrderTotal eseasonlizedtotal
#> 1   Jan                1          1               1.0
#> 2   Jan                1          2               2.0
#> 3   Feb                2          3               1.5
#> 4   Feb                2          4               2.0

Создано в 2019-01-30 при представлении пакета (v0.2.1)

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