将数字矩阵转换为 R 中的分类矩阵?

Convert numeric matrix into categorical in R?

我有一个矩阵

A <- rbind(c(1,1),c(2,2))

和一些类别

cat <- c("Good","Bad", "Ugly")

我想将A转化为对应的类别"Good" <- 1, "Bad" <- 2, "Ugly" <- 3。但是使用cat,我得到

> cat[A]
[1] "Good" "Bad"  "Good" "Bad" 

如何获得正确的转换?

一个选项是与命名的 vector 或 key/val 对匹配以替换 'A' 中的值,然后将其分配回 'A' 和 [] 保持初始向量的结构

A[] <- names(setNames(c(1:3), cat)[A])
A
#    [,1]   [,2]  
#[1,] "Good" "Good"
#[2,] "Bad"  "Bad" 

请注意

A[] <- cat[A]

考虑到索引是从 1 到 3 排序的,也应该可以工作。提到的第一个案例是一般案例

您可以先使用 t():

转置矩阵
> cat[t(A)]
#> [1] "Good" "Good" "Bad"  "Bad"

或者,如果您希望结果为矩阵,您可以将其转换回来:

> matrix(cat[A], ncol = ncol(A))
#>      [,1]   [,2]  
#> [1,] "Good" "Good"
#> [2,] "Bad"  "Bad"