在 R 中的特定条件下向 Table 添加行

Adding Row to Table Under Certain Conditions in R

我有以下两个向量:

> pred
 [1] "1" "1" "1" "1" "1" "1" "1" "1" "1" "1" "1" "1" "1" "1" "1" "1" "1" "1"
[19] "1" "1" "1" "1" "1" "1" "1" "1" "1" "1" "1" "1" "1"

> act
 [1] "0" "1" "0" "1" "0" "1" "0" "0" "1" "0" "1" "1" "1" "1" "1" "1" "1" "1"
[19] "1" "0" "1" "0" "0" "1" "1" "0" "1" "0" "0" "1" "1"

我正在尝试通过这样做来制作这两个混淆矩阵:

> conf = table(pred, act)
> conf 
    act
pred  0  1
   1 12 19

显然,由于pred向量的每个向量都是1,所以这个混淆矩阵只有一行;第一项是错误分类的数量,第二项是正确分类的数量。

我正在为几种情况做这些混淆矩阵,一般来说,它们是 2 x 2,第一行对应的正确和错误分类为 0。但是,在这些条件下,混淆矩阵是 1 x 2,所以我想将这个矩阵设为 2 x 2,第一行为 0。像这样:

> matrix(c(rep(0, 2), conf[1, 1], conf[1, 2]), ncol = 2, byrow = TRUE)
     [,1] [,2]
[1,]    0    0
[2,]   12   19

我想做的是,如果这个混淆矩阵的维度是 1 x 2,它就会变成 2 x 2 矩阵,否则就不管了。我试过这个:

> conf = ifelse(nrow(conf) == 1, 
                matrix(c(rep(0, 2), conf[1, 1], conf[1, 2]), 
                       ncol = 2, byrow = TRUE), 
                conf)

但是,当我尝试这样做时,我得到以下结果:

> conf
[1] 0

我该如何解决这个问题?

您可以将 predact 转换为 factors,将 levels 转换为 union 两者

all_levels <- union(act, pred)

pred <- factor(pred, levels = all_levels)
act <- factor(act, levels = all_levels)
table(pred, act)

#    act
#pred  0  1
#   0  0  0
#   1 12 19