Рассчитать пропорцию группы - PullRequest
0 голосов
/ 29 июня 2018

Я пытаюсь вычислить долю (%) каждой записи от общего количества группы в кадре данных. Мои данные выглядят так:

enter image description here

Где у меня есть коэффициенты для Station, Month и PHylum, а затем для общего количества. Я хотел бы показать итоговые значения как относительные%, поэтому, в основном, суммируйте итоги по станциям и месяцам, а затем примените исходную таблицу.

В R я дошел до:

bn_phyla %>% 
  group_by(Station, Month) %>% 
  summarise(total=sum(SumOfTotal Caught)) %>% 
  mutate(prop=SumOfTotal Caught/total)

Что дает мне итоги группы, но как мне разделить это обратно на исходные данные и сохранить столбец типа?

Спасибо

PS .. У Stackoverflow нет способа вставить таблицу, кроме изображения?

1 Ответ

0 голосов
/ 29 июня 2018

Вы можете сделать это без подведения итогов, и все будет работать как положено Я удвоил ваш пример данных, поэтому у меня есть две группы для работы, чтобы показать, как это работает.

library(dplyr)

bn_phyla %>% 
  group_by(Station, Month) %>% 
  mutate(prop = SumOfTotal_Caught/sum(SumOfTotal_Caught))

# A tibble: 8 x 5
# Groups:   Station, Month [2]
  Station Month  Phylum     SumOfTotal_Caught  prop
  <chr>   <chr>  <chr>                  <dbl> <dbl>
1 A       Feb-18 Annelida                  20 0.182
2 A       Feb-18 Arthropoda                20 0.182
3 A       Feb-18 Mollusca                  30 0.273
4 A       Feb-18 Nemertea                  40 0.364
5 B       Mar-18 Annelida                  40 0.333
6 B       Mar-18 Arthropoda                30 0.25 
7 B       Mar-18 Mollusca                  30 0.25 
8 B       Mar-18 Nemertea                  20 0.167

данные:

# data_frame comes from dplyr
bn_phyla <- data_frame(Station = c(rep("A", 4), rep("B", 4)),
                       Month = c(rep("Feb-18", 4), rep("Mar-18", 4)),
                       Phylum = c("Annelida", "Arthropoda", "Mollusca", "Nemertea", "Annelida", "Arthropoda", "Mollusca", "Nemertea"),
                       SumOfTotal_Caught = c(20,20,30,40, 40,30,30,20))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...