【问题标题】:Create a count table with unequal number to variables为变量创建一个数量不等的计数表
【发布时间】:2016-09-23 05:19:38
【问题描述】:

我有以下数据集zx

#zx

      A      B    C       D
1    COW    COW  BIRD   COW
2    COW   BIRD  COW    COW
3 FLOWER    DND  BIRD    DND
4    COW    COW  BIRD  FLOWER
5 FLOWER FLOWER  DND    COW
6 FLOWER    COW  COW    BIRD

我想创建一个如下所示的计数表:

        A   B   C   D
COW     3   3   2   3
BIRD    0   1   3   1
FLOWER  3   1   0   1
DND     0   1   1   1

我尝试使用以下代码,但它显示错误,因为第一列中没有 DNDBIRD,即列之间的变量数量不相等:

countsd <-  data.frame(apply(zx, 2, count))

【问题讨论】:

  • library(tidyr) ; zx %&gt;% gather() %&gt;% table() %&gt;% t()
  • t(table(data.frame(as.table(t(zx)))[-2]))

标签: r


【解决方案1】:

您可以按列使用apply

基本上,将每个元素创建为factor,数据框中存在的所有唯一值都为levels,然后计算列中该级别的频率。

apply(zx, 2, function(x) table(factor(x, levels = unique(unlist(zx)))))

#       A B C D
#COW    3 3 2 3
#FLOWER 3 1 0 1
#BIRD   0 1 3 1
#DND    0 1 1 1

【讨论】:

    【解决方案2】:

    你可以这样做。 基本上,您在这里按行对数据框进行矢量化,然后创建表格。

    > table(as.vector(t(zx)),rep(names(zx),nrow(zx)))
    

    你会得到以下输出

            A B C D
     BIRD   0 1 3 1
     COW    3 3 2 3
     DND    0 1 1 1
     FLOWER 3 1 0 1
    

    【讨论】:

      【解决方案3】:

      要调用table,请将您的数据融合为长格式,以便每个字母与其单词配对。 tidyr::gather 是这样做的一个函数:

      library(tidyr)
      
      zx %>% gather() %>% head()
      
      ##   key  value
      ## 1   A    COW
      ## 2   A    COW
      ## 3   A FLOWER
      ## 4   A    COW
      ## 5   A FLOWER
      ## 6   A FLOWER
      

      然后拨打table。您可以指定顺序,尽管它的默认设置是为每个变量制作一个表格,这正是您想要的。不过顺序是倒数的,所以transpose 重新排列:

      zx %>% gather() %>% table() %>% t()
      
      ##         key
      ## value    A B C D
      ##   BIRD   0 1 3 1
      ##   COW    3 3 2 3
      ##   DND    0 1 1 1
      ##   FLOWER 3 1 0 1
      

      【讨论】:

        【解决方案4】:

        我们可以从qdapTools使用mtabulate

        library(qdapTools)
        t(mtabulate(zx))
        #       A B C D
        #BIRD   0 1 3 1
        #COW    3 3 2 3
        #DND    0 1 1 1
        #FLOWER 3 1 0 1
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2022-08-04
          • 1970-01-01
          • 2018-10-20
          • 1970-01-01
          • 1970-01-01
          • 2021-04-03
          • 1970-01-01
          • 2015-07-21
          相关资源
          最近更新 更多