Замена ячеек матрицы для соответствующих имен строк - PullRequest
0 голосов
/ 09 мая 2018

Я работаю с матрицей, которая выглядит как этот вход.

enter image description here

Я пытаюсь заменить числа в столбце 2 соответствующими именами строк. То есть все 1 будут заменены на row.name (матрица). Таким образом, у меня будет следующий вывод.

enter image description here

Фактическая матрица слишком велика для циклического применения ... Извините, я использую изображения, поскольку мне было проще представить это в Excel. Мне также жаль, что я совсем новичок в R ...

1 Ответ

0 голосов
/ 09 мая 2018

Векторизованный подход (должен быть максимально быстрым):

mat <- matrix(c(letters[1:11], 1,1,1,2,2,3,3,3,4,4,4), ncol = 2)
    colnames(mat) <- c("A", "B")
    rownames(mat) <- 1:11

> mat
   A   B  
1  "a" "1"
2  "b" "1"
3  "c" "1"
4  "d" "2"
5  "e" "2"
6  "f" "3"
7  "g" "3"
8  "h" "3"
9  "i" "4"
10 "j" "4"
11 "k" "4"


mat[, "B"] <- mat[as.numeric(mat[, "B"]), "A"]
> mat
   A   B  
1  "a" "a"
2  "b" "a"
3  "c" "a"
4  "d" "b"
5  "e" "b"
6  "f" "c"
7  "g" "c"
8  "h" "c"
9  "i" "d"
10 "j" "d"
11 "k" "d"

Или вы можете использовать sapply:

mat[, "B"] <- sapply(mat[, "B"], function(x) mat[as.numeric(x), "A"])

Редактировать: я поместил векторизованное решение вверху, так как это явно более быстрый (или даже самый быстрый?) Подход.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...