найти частоту событий в группах dplyr - PullRequest
0 голосов
/ 28 февраля 2020

У меня есть сгруппированный df с разной длиной групп. Я хочу подсчитать количество событий в каждой группе. Поэтому, если у меня есть следующее:

df <- data.frame(group = rep(1:4,times=c(20,10,17,8)),
                 outcome = rep(c("yes","yes","no","yes","no"),times = 11))

Я хочу обобщить это так, чтобы я мог видеть частоту да и частоту нет в каждой группе. что-то вроде:

df %>% group_by(group) %>%
  summarise(freqyes = (. %>% filter(outcome=="yes") %>% n()) / n(),
            freqyes = (. %>% filter(outcome=="no") %>% n()) / n())

за исключением того, что это не работает.

Да и нет в каждой группе следует добавить к 100.

Спасибо.

1 Ответ

2 голосов
/ 28 февраля 2020

Мы можем count, а затем рассчитать пропорцию на group.

library(dplyr)

df %>% count(group, outcome) %>% group_by(group) %>% mutate(n = n/sum(n) * 100)

#  group outcome   n
#  <int> <fct>   <dbl>
#1     1 no       40  
#2     1 yes      60  
#3     2 no       40  
#4     2 yes      60  
#5     3 no       35.3
#6     3 yes      64.7
#7     4 no       50  
#8     4 yes      50  

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

prop.table(table(df), 1) * 100

#    outcome
#group       no      yes
#    1 40.00000 60.00000
#    2 40.00000 60.00000
#    3 35.29412 64.70588
#    4 50.00000 50.00000
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...