Анализ комбинаций двоичных переменных в R

#r #dataframe #binary #combinations #frequency

Вопрос:

У меня есть набор данных, в котором много двоичных переменных. Для простоты иллюстрации приведем уменьшенную версию, содержащую всего 4 переменные:

 set.seed(5) my_data<-data.frame("Slept Well"=sample(c(0,1),10,TRUE),  "Had Breakfast"=sample(c(0,1),10,TRUE),  "Worked out"=sample(c(0,1),10,TRUE),  "Meditated"=sample(c(0,1),10,TRUE))  

В приведенном выше примере каждая строка соответствует наблюдению. Меня интересует анализ частоты каждой уникальной комбинации переменных. Например, сколько наблюдений показало, что они оба хорошо спали и медитировали, но не завтракали и не занимались спортом?

Я хотел бы иметь возможность ранжировать уникальные комбинации от наиболее часто встречающихся до наименее часто встречающихся. Каков наилучший способ кодирования этого?

Ответ №1:

Вы можете использовать aggregate .

 x <- aggregate(list(n=rep(1, nrow(my_data))), my_data, length) #x <- aggregate(list(n=my_data[,1]), my_data, length) #Alternative x[order(-x$n),] # Slept.Well Had.Breakfast Worked.out Meditated n #4 0 1 1 0 2 #1 0 0 0 0 1 #2 1 1 0 0 1 #3 0 0 1 0 1 #5 0 0 0 1 1 #6 1 0 0 1 1 #7 0 1 0 1 1 #8 0 0 1 1 1 #9 0 1 1 1 1  

Ответ №2:

Как насчет dplyr решения проблемы:

 library(dplyr)    my_data %>%  # group it  group_by_all() %>%  # frequencies  summarise(freq = n()) %>%  # order decreasing  arrange(-freq)  # A tibble: 9 x 5  Slept.Well Had.Breakfast Worked.out Meditated freq  <chr> <chr> <chr> <chr> <int> 1 0 1 1 0 2 2 0 0 0 0 1 3 0 0 0 1 1 4 0 0 1 0 1 5 0 0 1 1 1 6 0 1 0 1 1 7 0 1 1 1 1 8 1 0 0 1 1 9 1 1 0 0 1  

Или с data.table :

 res <- setorder(data.table(my_data)[,"."(freq = .N), by = names(my_data)],-freq) res  Slept.Well Had.Breakfast Worked.out Meditated freq 1: 0 1 1 0 2 2: 1 0 0 1 1 3: 0 0 1 0 1 4: 0 0 0 0 1 5: 0 1 0 1 1 6: 0 1 1 1 1 7: 0 0 1 1 1 8: 0 0 0 1 1 9: 1 1 0 0 1