Как рассчитать относительные частоты с помощью dplyr


Часто вам может понадобиться вычислить относительную частоту/пропорции значений в одном или нескольких столбцах фрейма данных в R.

К счастью, это легко сделать с помощью функций из пакета dplyr.В этом руководстве показано, как использовать эти функции для расчета относительных частот в следующем фрейме данных:

#create data frame
df <- data.frame(team = c('A', 'A', 'A', 'B', 'B', 'B', 'B'),
 position = c('G', 'F', 'F', 'G', 'G', 'G', 'F'),
 points = c(12, 15, 19, 22, 32, 34, 39))

#view data frame
df

 team position points
1 A G 12
2 A F 15
3 A F 19
4 B G 22
5 B G 32
6 B G 34
7 B F 39

Пример 1: относительная частота одной переменной

В следующем коде показано, как рассчитать относительную частоту каждой команды во фрейме данных:

library(dplyr)

df %>%
 group_by(team) %>%
 summarise (n = n()) %>%
 mutate (freq = n / sum(n))

# A tibble: 2 x 3
 team n freq

1 A 3 0.429
2 B 4 0.571

Это говорит нам о том, что на команду А приходится 42,9% всех строк во фрейме данных, а на команду Б — оставшиеся 57,1% строк. Обратите внимание, что вместе они составляют 100%.

Связанный: Полное руководство: как группировать и суммировать данные в R

Пример 2: относительная частота нескольких переменных

Следующий код показывает, как рассчитать относительную частоту позиций по командам:

library(dplyr)

df %>%
 group_by(team, position) %>%
 summarise (n = n()) %>%
 mutate (freq = n / sum(n))

# A tibble: 4 x 4
# Groups: team [2]
 team position n freq

1 A F 2 0.667
2 A G 1 0.333
3 B F 1 0.250
4 B G 3 0.750

Это говорит нам о том, что:

  • 66,7% игроков команды А находятся на позиции F.
  • 33,3% игроков команды А находятся на позиции G.
  • 25,0% игроков команды А находятся на позиции F.
  • 75,0% игроков команды B находятся на позиции G.

Связанный: Как использовать мутацию для создания новых переменных в R

Пример 3. Отображение относительных частот в процентах

Следующий код показывает, как рассчитать относительную частоту позиций по командам и как отобразить эти относительные частоты в процентах:

library(dplyr)

df %>%
 group_by(team, position) %>%
 summarise (n = n()) %>%
 mutate (freq = paste0(round(100 \* n/sum(n), 0), '%'))

# A tibble: 4 x 4
# Groups: team [2]
 team position n freq 

1 A F 2 67% 
2 A G 1 33% 
3 B F 1 25% 
4 B G 3 75%

Вы можете найти больше руководств по R здесь .