R 中行的频率 table

Frequency table by row in R

这可能是一个新手问题,但我在网上找不到答案...可能是因为我不善于描述问题。

我想创建按行分隔的标称数据的频率 table。例如,在这个矩阵中:

x <- matrix(nrow = 3, ncol = 3, 
  c("A","B","B",
  "C","C","B",
 "D","A","B"
  ))

使用 table(x) 函数得到:

A B C D
2 4 2 1

但我想获得每一行的单独计数,结果 table 是:

A B C D
1 2 0 0

0 1 1 0

1 1 0 1

我确定这是某种形式的偶然事件 table 但对于我来说,我无法弄清楚。

我们可以使用 applyMARGIN=1 循环遍历列,转换为 factorlevels 指定为 unique 个元素 'x',得到 table

un1 <- sort(unique(c(x)))
t(apply(x, 2, function(x) table(factor(x, levels = un1))))
#     A B C D
#[1,] 1 2 0 0
#[2,] 0 1 2 0
#[3,] 1 1 0 1

或使用矢量化方法

table(c(col(x)), c(x))
#    A B C D
#  1 1 2 0 0
#  2 0 1 2 0
#  3 1 1 0 1