【问题标题】:how to group a column and that the other column is grouped to generate a contingency table in R如何对列进行分组,并将另一列分组以在 R 中生成列联表
【发布时间】:2018-11-09 23:08:26
【问题描述】:

我需要将列“Estrato”1 和 2 分组为低,3、4、5 为中,6 为高等,考虑到“Callevive”列,“Estrato”列的格式是因素。生成如图所示的列联表。

 enter code here > head(datos17,25)
       Estrato                Callevive
    1        2 Moderadamente Satisfecho
    2        4 Moderadamente Satisfecho
    3        3 Moderadamente Satisfecho
    4        0 Moderadamente Satisfecho
    5        3 Moderadamente Satisfecho
    6        3 Moderadamente Satisfecho
    7        3 Moderadamente Satisfecho
    8        3 Moderadamente Satisfecho
    9        3 Moderadamente Satisfecho
    10       2 Moderadamente Satisfecho
    11       3 Moderadamente Satisfecho
    12       2 Moderadamente Satisfecho
    13       2 Moderadamente Satisfecho
    14       3 Moderadamente Satisfecho
    15       2 Moderadamente Satisfecho
    16       2           Muy Satisfecho
    17       2       Un Poco Satisfecho
    18       3 Moderadamente Satisfecho
    19       2 Moderadamente Satisfecho
    20       2 Moderadamente Satisfecho
    21       2           Muy Satisfecho
    22       2           Muy Satisfecho
    23       2           Muy Satisfecho
    24       2           Muy Satisfecho
    25       5 Moderadamente Satisfecho

【问题讨论】:

    标签: r database datatable chi-squared contingency


    【解决方案1】:

    你的意思是这样的吗?

    library(tidyverse);
    df %>%
        mutate(group = cut(
            Estrato,
            breaks = c(-1, 2, 5, Inf),
            labels = c("low", "medium", "high"))) %>%
        group_by(group, Callevive) %>%
        tally() %>%
        spread(Callevive, n)
    ## A tibble: 2 x 4
    ## Groups:   group [2]
    #  group  `Moderadamente Satisfecho` `Muy Satisfecho` `Un Poco Satisfecho`
    #  <fct>                       <int>            <int>                <int>
    #1 low                             8                5                    1
    #2 medium                         11               NA                   NA
    

    解释:我们将Estrato 中的条目分到low (0,1,2)、medium (3,4,5) 和high (&gt;6) 组中,然后使用tally 和@987654330 @ 输出列联表。


    样本数据

    df <- read.table(text =
        "      Estrato                Callevive
        1        2 'Moderadamente Satisfecho'
        2        4 'Moderadamente Satisfecho'
        3        3 'Moderadamente Satisfecho'
        4        0 'Moderadamente Satisfecho'
        5        3 'Moderadamente Satisfecho'
        6        3 'Moderadamente Satisfecho'
        7        3 'Moderadamente Satisfecho'
        8        3 'Moderadamente Satisfecho'
        9        3 'Moderadamente Satisfecho'
        10       2 'Moderadamente Satisfecho'
        11       3 'Moderadamente Satisfecho'
        12       2 'Moderadamente Satisfecho'
        13       2 'Moderadamente Satisfecho'
        14       3 'Moderadamente Satisfecho'
        15       2 'Moderadamente Satisfecho'
        16       2           'Muy Satisfecho'
        17       2       'Un Poco Satisfecho'
        18       3 'Moderadamente Satisfecho'
        19       2 'Moderadamente Satisfecho'
        20       2 'Moderadamente Satisfecho'
        21       2           'Muy Satisfecho'
        22       2           'Muy Satisfecho'
        23       2           'Muy Satisfecho'
        24       2           'Muy Satisfecho'
        25       5 'Moderadamente Satisfecho'", row.names = 1)
    

    【讨论】:

    • 感谢您的回复,代码在表格中生成带有inf的条目,我认为它是“breaks”,因为它将它们作为数字。你能更详细地解释一下它是如何工作的吗?如果 Estrato 列是因素会发生什么?
    • @Jonas 我会将Estrato 转换为带有as.numeric(as.character(...))numeric 向量。然后像以前一样使用cut 对条目进行分类。
    猜你喜欢
    • 2017-08-26
    • 2015-04-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-06-28
    • 1970-01-01
    • 2017-04-01
    相关资源
    最近更新 更多