Получить скользящее среднее с учетом относительных пропорций переменных в другом столбце

#r #moving-average

#r #скользящее среднее

Вопрос:

Я хочу получить скользящее среднее (например, используя movavg() ) и получить относительные пропорции категориальных переменных из другого столбца. Для понимания возьмите следующий фрейм данных:

 data.frame('employee'=1:8, 'pastjob'=c('sales','sales admin','sales','sales admin','ops','ops','Ramp;D','IT'), 'results'=c(150,200,250,300,125,150,175,150))
 

Я хочу получить простое скользящее среднее для каждых четырех значений в столбце «результаты» и получить относительные пропорции «прошедшего задания» в других столбцах. Таким образом, результат будет:

225 — продажи (50%), администратор продаж (50%), операционные операции (0%), исследования и разработки (0%), ИТ (0%)

150 — продажи (0%), администратор продаж (0%), операционные операции (50%), исследования и разработки (25%), ИТ (25%)

Ответ №1:

Привет, просто замените 4 на число размера индекса

 library(tidyverse)

df_example <- data.frame('employee'=1:8, 'pastjob'=c('sales','sales admin','sales','sales admin','ops','ops','Ramp;D','IT'), 'results'=c(150,200,250,300,125,150,175,150))

df_example %>% 
  mutate(index = rep(1:(n()/4),each = 4)) %>% 
  group_by(index,pastjob) %>% 
  summarise(total_sales = sum(results),ns = n()) %>%
  mutate(prop = total_sales/sum(total_sales),
         group_mean = sum(total_sales)/sum(ns)) %>%
  select(index,pastjob,prop,group_mean) %>% 
  pivot_wider(values_from = prop,names_from = pastjob,values_fill = 0)
#> `summarise()` has grouped output by 'index'. You can override using the `.groups` argument.
#> # A tibble: 2 x 7
#> # Groups:   index [2]
#>   index group_mean sales `sales admin`    IT   ops `Ramp;D`
#>   <int>      <dbl> <dbl>         <dbl> <dbl> <dbl> <dbl>
#> 1     1        225 0.444         0.556  0    0     0    
#> 2     2        150 0             0      0.25 0.458 0.292
 

Создано 2021-01-20 пакетом reprex (версия 0.3.0)