Как мне создать таблицы сопряженности в 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