R: вычислить долю фактора в сочетании с group by в data.frame

#r #dplyr

#r #dplyr

Вопрос:

Я хочу выполнить несколько вычислений summarise , используя фрейм данных, используя group by. Входные данные:

 dat <- data.frame (ID = c(1:10),
                   var1 = as.factor(c("A","B","A","A","B","B","B","C","A","B")),
                   Var2 = as.factor(c("low","medium","low","low","medium","high","high","high","high","high")))
  

Теперь я хочу выполнить group by для var1, подсчитать идентификаторы и вычислить пропорцию, где var2 = high . Мой вывод должен выглядеть следующим образом:

   var1 total prop_high
1    A     4      0.25
2    B     5      0.60
3    C     1      1.00
  

До сих пор я получил следующий код, но я застрял на вычислении пропорции

 dat2 <- dat %>% 
  group_by(var1) %>%
  summarise(total = n(),
            prop_high = )
  

Ответ №1:

Вы можете взять mean логические значения, чтобы получить пропорцию.

 library(dplyr)

dat %>% 
  group_by(var1) %>%
  summarise(total = n(),
            prop_high = mean(Var2 == 'high'))
            #Same as
            #prop_high = sum(Var2 == 'high')/n())

#   var1  total prop_high
#  <fct> <int>     <dbl>
#1 A         4      0.25
#2 B         5      0.6 
#3 C         1      1   
  

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

1. Это фантастика. Я всегда думал, что агрегатные функции невозможны для факторов, но я никогда не рассматривал возможность их использования в качестве логических значений. Большое спасибо!