Как мне создать таблицы сопряженности в R?

У меня есть большой фрейм данных со многими переменными. Многие из них представляют собой ответы по шкале Лайкерта, и школы, к которым относятся наблюдения, являются логическими переменными (и могут включать в себя совпадение).

Пример:

Q1 <- c(1,2,2,4,3,5)

Q2 <- c(3,4,3,5,4,5)

A <- c(TRUE,FALSE,TRUE,TRUE,FALSE,TRUE)

B <- c(FALSE,TRUE,FALSE,TRUE,FALSE,FALSE)

df <- data.frame(Q1,Q2, A, B)

Вывод, который я хочу, - это таблица непредвиденных обстоятельств:

Q1

1 2 3 4 5

A 1 1 0 1 1

B 0 1 0 1 0

где я могу сделать chi2 тест между школами - здесь A а также B, Ничто из того, что я пробовал, не работает.

Я думаю, что, возможно, есть ответ в том, что я прочитал онлайн, но мне не хватает знаний, чтобы распознать это!

1 ответ

Решение

Мы можем использовать dplyr/tidyr, Группируем по "Q1", получаем sum столбцов "A", "B" с использованием summarise_eachконвертируйте "широкий" в "длинный" формат с помощью gather и измените его обратно на "широкий" с помощью "распространения".

library(dplyr)
library(tidyr)
df %>% 
  group_by(Q1) %>% 
  summarise_each(funs(sum(.)), A:B) %>% 
  gather(Var, Val,-Q1) %>%
  spread(Q1, Val)

#     Var     1     2     3     4     5
#   (fctr) (int) (int) (int) (int) (int) 
# 1      A     1     1     0     1     1
# 2      B     0     1     0     1     0

base R вариант xtabs после преобразования в long формат

 d1 <- data.frame(Q1= rep(Q1,2), Var= rep(names(df)[3:4],
           each=nrow(df)), Val=unlist(df[3:4]))
 xtabs(Val~Var+Q1, d1)
 #      Q1
 #Var 1 2 3 4 5
 # A 1 1 0 1 1
 # B 0 1 0 1 0
Другие вопросы по тегам