【问题标题】:How do I create contingency tables in R?如何在 R 中创建列联表?
【发布时间】:2016-03-03 01:49:12
【问题描述】:

我有一个包含许多变量的大型数据框。 许多是李克特量表的答案,而观察所属的学校是逻辑变量(并且可能包括重叠)。

示例:

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

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

【问题讨论】:

    标签: r contingency


    【解决方案1】:

    我们可以使用dplyr/tidyr。我们按“Q1”分组,使用summarise_each 获取“A”、“B”列的sum,使用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 选项转换为long 格式后为xtabs

     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
    

    【讨论】:

    • 嗨,这不是真正的评论,而是一个问题:我在安装包下找不到 tidyr。我在那里找到了 dplyr 并安装了它。我将 cran 镜子设置为新西兰(我认为这不重要)。
    • @SarahR 当您执行install.packages('tidyr') 时,消息是什么?通常云镜像应该有。
    • 我只是查了一下。键入 install.. 给出消息警告消息:包“tidyr”不可用(对于 R 版本 3.0.3)我猜这回答了为什么我找不到它。您的其他建议效果很好。
    • @SarahR 新的 R 版本是 R 3.2.2。能不能更新到新版本再安装。
    猜你喜欢
    • 2020-10-06
    • 2021-06-18
    • 2011-10-20
    • 2020-05-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-13
    • 2011-02-07
    相关资源
    最近更新 更多