如何在R中创建列联表?

时间:2015-11-29 09:50:48

标签: r contingency

我有一个包含许多变量的大型数据框。 许多是比较规模的答案和学校,观察属于它们是逻辑变量(并且可以包括重叠)。

示例:

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测试 - AB。我没有尝试过任何工作。

我认为我在线阅读的内容可能有答案,但我缺乏识别它的知识!

1 个答案:

答案 0 :(得分:2)

我们可以使用dplyr/tidyr。我们按'Q1'分组,使用sum获取'A','B'列的summarise_each,将'wide'格式转换为'long'格式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