Еженедельный вес на основе категории с использованием dplyr в R

#r #dplyr

#r #dplyr

Вопрос:

У меня есть следующие данные, и я хочу создать «Окончательный список», показанный ниже, используя dplyr в R. Я был бы признателен за ваши идеи.

 | Year  | Week    | MainCat|Qty    |Final Col     |
|:----: |:------: |:-----: |:-----:|:------------:|
| 2017  | 1       | Edible |69     |69/(69 12)    |
| 2017  | 2       | Edible |12     |12/(69 12)    |
| 2017  | 1       | Flowers|88     |88/(88 47)    |
| 2017  | 2       | Flowers|47     |47/(88 47)    |
| 2018  | 1       | Edible |90     |90/(90 35)    |
| 2018  | 2       | Edible |35     |35/(90 35)    |
| 2018  | 1       | Flowers|78     |78/(78 85)    |
| 2018  | 2       | Flowers|85     |85/(78 85)    |
 

Комментарии:

1. Итак, недели 1 и 2 группируются каждый раз, когда они повторяются?

2. ДА. Исходные данные сохраняются до 53-й недели. Итак, я хотел бы суммировать все недели для категории «съедобные» за 2017 год, а затем разделить каждую неделю 2018 года на общую сумму за 2018 год … и повторить этот процесс для каждого года и основной категории

Ответ №1:

Это можно сделать с group_by помощью операции, т.Е. сгруппировать по ‘Year’, ‘mainCat’, разделить ‘Qty’ на sum ‘Qty’, чтобы создать столбец ‘Final’

 library(dplyr)
df1 <- df1 %>%
       group_by(Year, MainCat) %>%
       mutate(Final = Qty/sum(Qty))
 

Ответ №2:

Вы можете использовать prop.table :

 library(dplyr)
df %>% group_by(Year, MainCat) %>% mutate(Final = prop.table(Qty))

#   Year  Week MainCat   Qty Final
#  <int> <int> <chr>   <int> <dbl>
#1  2017     1 Edible     69 0.852
#2  2017     2 Edible     12 0.148
#3  2017     1 Flowers    88 0.652
#4  2017     2 Flowers    47 0.348
#5  2018     1 Edible     90 0.72 
#6  2018     2 Edible     35 0.28 
#7  2018     1 Flowers    78 0.479
#8  2018     2 Flowers    85 0.521
 

Вы также можете сделать это в base R :

 df$Final <- with(df, ave(Qty, Year, MainCat, FUN = prop.table))