Преобразовать числовую матрицу в категориальную в R? - PullRequest
0 голосов
/ 30 января 2019

У меня есть матрица

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

и некоторые категории

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

Я хочу преобразовать A в соответствующие категории "Хорошо" <- 1, "Плохо" <- 2, "Гадкий" <- 3. Но, используя <code>cat, я получаю

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

Как мне получить правильное преобразование?

Ответы [ 2 ]

0 голосов
/ 30 января 2019

Сначала вы можете транспонировать матрицу, используя t():

> cat[t(A)]
#> [1] "Good" "Good" "Bad"  "Bad"

Или, если вы хотите, чтобы результат был матрицей, вы можете преобразовать его обратно:

> matrix(cat[A], ncol = ncol(A))
#>      [,1]   [,2]  
#> [1,] "Good" "Good"
#> [2,] "Bad"  "Bad" 
0 голосов
/ 30 января 2019

Один вариант сопоставляется с именованными парами 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. Первый упомянутый случай - это общий случай

...