2015-11-29 9 views
2

У меня есть большой кадр данных со многими переменными. Многие из них являются ответами на шкалу ответов и школами, к которым относятся наблюдения, которые являются логическими переменными (и могут включать перекрытие).Как создать таблицы непредвиденных обстоятельств в 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. Ничего, что я пробовал, работает.

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

ответ

2

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

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 
+0

Привет, это на самом деле не комментарий, а вопрос: я не могу найти tidyr под Установочные пакеты. Я нашел dplyr там и установил его. Я поставил зеркало крана Новой Зеландии (не то, что я думаю, что это должно иметь значение). –

+0

@SarahR Когда вы выполняете 'install.packages ('tidyr')' что такое сообщение? Обычно зеркало Облака должно иметь это. – akrun

+0

Я только посмотрел. Typing install .. дал сообщение Предупреждающее сообщение: package 'tidyr' не доступен (для версии R 3.0.3) Который, я думаю, отвечает, почему я не могу его найти. Ваше другое предложение отлично работает. –

Смежные вопросы