代码之家  ›  专栏  ›  技术社区  ›  Demetri Pananos

获取矩阵每列的列联表

  •  1
  • Demetri Pananos  · 技术社区  · 7 年前

    假设我有一个数字矩阵。矩阵具有 dim(X)=(200,5) 每个元素在1到5之间。

    我想知道每列中每个数字的计数。看起来像

      X1 X2 X3 X4 X5
    1 #  #  #  #  #
    2 #  #  #  #  #
    3 #  #  #  #  #
    4 #  #  #  #  #
    5 #  #  #  #  #
    

    因为有200行,所以每列的总和应该是200。

    table

    2 回复  |  直到 7 年前
        1
  •  3
  •   Zheyuan Li    7 年前

    • 当你有一个字母矩阵;

    --

    cX <- c(X)
    k <- sort(unique(cX))
    ## as if we have a matrix of factors
    XX <- matrix(match(cX, k), dim(X)[1], dimnames = list(k, 1:dim(X)[2]))
    ## aligned column-wise contingency table
    tab <- apply(XX, 2, tabulate)
    ## aligned column-wise proportion table
    prop <- tab / colSums(tab)[col(tab)]
    

    我放弃了最初的答案

    lapply(data.frame(X), table)
    apply(X, 2, table)
    

    或者第二个版本(一个更健壮的版本,但与第一个解决方案一样低效):

    k <- sort(unique(c(X)))
    apply(X, 2, function (u) table(factor(u, levels = k)) )
    

    对于你的例子,上面的新答案有点“过火”,但在实践中更有用(我认为)。

        2
  •  0
  •   989    7 年前

    怎么样 tabulate

    apply(m,2,tabulate)
    
    #    [,1] [,2] [,3] [,4] [,5]
    #[1,]   39   47   38   42   34
    #[2,]   41   43   41   36   39
    #[3,]   46   33   38   44   39
    #[4,]   35   31   40   41   53
    #[5,]   39   46   43   37   35
    

    table :

    apply(m,2,table)
    

    set.seed(1)
    m <- t(replicate(200,sample(5),))