Как получить столбец матрицы и имя строки по значению индекса матрицы? - PullRequest
18 голосов
/ 29 марта 2012

Итак, скажем, у меня есть матрица, mdat, и я знаю только индексный номер.Как получить имена столбцов и строк?Например:

> mdat <- matrix(c(1,2,3, 11,12,13), nrow = 2, ncol=3, byrow=TRUE, 
    dimnames = list(c("row1", "row2"), c("C.1", "C.2", "C.3"))) 
> mdat[4] 
[1] 12 
> names(mdat[4]) 
NULL 
> colnames(mdat[4]) 
NULL 
> rownames(mdat[4])
NULL 
> dimnames(mdat[4]) 
NULL 

Ответы [ 2 ]

27 голосов
/ 29 марта 2012

Сначала вам нужно получить строку и столбец этого индекса, используя arrayInd.

k <- arrayInd(4, dim(mdat))

Затем вы можете получить правильное имя, получив этот элемент из имен строк и столбцов

rownames(mdat)[k[,1]]
colnames(mdat)[k[,2]]

или оба одновременно, используя mapply:

mapply(`[[`, dimnames(mdat), k)
7 голосов
/ 29 марта 2012

Подмножество матрицы сначала приводит к одноэлементному вектору, который не имеет имен, как показано в вашем вопросе. Помните, что подмножество создает совершенно новый объект путем копирования. Невозможно сослаться на оригинал mdat после поднабора.

Это будет более понятно, если вы назначите результат поднабора другому объекту.

> m <- mdat[4]
> m
[1] 12
> names(m)  # no names were printed above... so
NULL

Вы действительно хотите сначала получить доступ к именам столбцов / строк и подмножеству их .

> colnames(mdat)[3]
[1] "C.3"
> rownames(mdat)[2]
[1] "row2"

Вы можете переназначить имена столбцов / строк аналогичным образом.

> colnames(mdat)[3] <- "C3"
> rownames(mdat)[2] <- "row.2"
> mdat
      C.1 C.2 C3
row1    1   2  3
row.2  11  12 13
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...