#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))