将数字矩阵转换为 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"
我有一个矩阵
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"