【问题标题】:How can I make a count table for demographic information from a data frame in R?如何从 R 中的数据框中制作人口统计信息的计数表?
【发布时间】:2020-04-28 09:15:28
【问题描述】:

我想创建一个可以用 R 格式化的表格,按计数汇总人口统计数据。例如,我有一个数据框(如下示例),其中包含有关性别、性取向和残疾的信息。我想要一个表格,显示有多少人识别为男性、女性、异性恋、同性恋等。所以基本上我想要 table(df$gender) 函数的等价物,但在一个表中有多个变量。理想情况下,能够将其格式化为看起来不错,然后导出。

此处的代码用于创建可重现的数据框(尽管在我的真实 df 中我有额外的列,我不想包含在表中):

gender <- c('female','male','male','female','male')
sexuality <- c('heterosexual','bisexual','heterosexual','asexual','homosexual')
disabled <- c('no','no','yes','no','yes')
fake.data <- data.frame(gender,sexuality,disabled)

我想要一个如下所示的表格:

**Gender**       
Male: 3      
Female: 2

**Sexuality** 
Heterosexual: 2
etc etc     

请问我该怎么做?

提前致谢!

【问题讨论】:

    标签: r


    【解决方案1】:

    您可以在每一列上调用table

    sapply(fake.data, table)
    
    #$gender
    
    #female   male 
    #     2      3 
    
    #$sexuality
    
    #     asexual     bisexual heterosexual   homosexual 
    #           1            1            2            1 
    
    #$disabled
    
    # no yes 
    #  3   2 
    

    【讨论】:

    • 谢谢!请问有没有办法把它变成一个可以格式化的表格/数据框?
    • @danibradford 像stack(unlist(sapply(fake.data, table))) 这样的东西有用吗?还有data.frame(sapply(fake.data, table)),但我认为stack 的选项更好。
    • 不幸的是它似乎不起作用,这可能是因为在我的真实数据框中有不同的行数?
    • 它是否给出任何错误信息?当你尝试它时它会返回什么?
    【解决方案2】:

    根据您希望表的复杂程度,您可以使用aggregate

    aggregate(
      x = fake.data$sexuality[fake.data$disabled=="no"],
      by = list(fake.data$gender[fake.data$disabled=="no"]),
      function(x) table(x))
    #  Group.1 x.asexual x.bisexual x.heterosexual x.homosexual
    #1  female         1          0              1            0
    #2    male         0          1              0            0
    

    或:

    aggregate(
      x = fake.data$sexuality[fake.data$disabled=="yes"],
      by = list(fake.data$gender[fake.data$disabled=="yes"]),
      function(x) table(x)) 
    #  Group.1 x.asexual x.bisexual x.heterosexual x.homosexual
    #1    male         0          0              1            1
    

    【讨论】:

      猜你喜欢
      • 2020-02-27
      • 1970-01-01
      • 2011-03-16
      • 1970-01-01
      • 2018-08-11
      • 2014-04-09
      • 2023-02-21
      • 1970-01-01
      • 2020-10-10
      相关资源
      最近更新 更多