R:平方意外事件 table

R: Squared contingency table

我想根据基于神经网络的观察和预测做出应急 table。因为我希望正数位于对角线上,所以我希望我的 table 是平方的,不管是否有只有 0 的行。也就是说,我想要

   b
a   a b c d e f g
  a 1 0 1 0 2 1 0
  b 0 0 0 0 0 0 0
  c 0 0 0 0 0 0 0
  d 2 3 1 2 2 3 2
  e 1 2 1 1 0 1 3
  f 0 0 0 0 0 0 0
  g 4 2 1 0 3 1 0

而不是:

> set.seed(1)
> b<-sample(letters[1:7],40,rep=TRUE)
> a<-sample(letters[1:4],40,rep=TRUE)
> 
> table(a,b)
   b
a   a b c d e f g
  a 1 0 1 0 2 1 0
  d 2 3 1 2 2 3 2
  e 1 2 1 1 0 1 3
  g 4 2 1 0 3 1 0

我该怎么做?

ab 转换为 factor,其中 levels 作为两者的 union :

tmp <- sort(union(a, b))
table(factor(a, levels = tmp), factor(b, levels = tmp))

#    a b c d e f g
#  a 0 1 1 2 2 1 4
#  b 2 1 1 1 2 3 2
#  c 4 0 1 2 0 1 1
#  d 0 1 1 1 3 1 1
#  e 0 0 0 0 0 0 0
#  f 0 0 0 0 0 0 0
#  g 0 0 0 0 0 0 0