获取矩阵的每列的列联表

时间:2017-06-26 20:37:22

标签: r matrix count contingency

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

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

的东西
  X1 X2 X3 X4 X5
1 #  #  #  #  #
2 #  #  #  #  #
3 #  #  #  #  #
4 #  #  #  #  #
5 #  #  #  #  #

每列的总和应为200,因为有200行。

table似乎很有希望,但它只返回整个矩阵的计数,而不是列。我怎样才能做到这一点?

2 个答案:

答案 0 :(得分:3)

我会这样做一般的事情。例如

  • 当你有一个字母矩阵时;
  • 当你仍然有一个整数矩阵,但它们不是连续的,比如5,7,10,11,20。

-

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)) )

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

答案 1 :(得分:0)

基地R 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),))