How do I retrieve a matrix column and row name by a matrix index value?
52,024
Solution 1
First you need to get the row and column of that index using arrayInd
.
k <- arrayInd(4, dim(mdat))
You can then get the right name by getting that element of the row and column names
rownames(mdat)[k[,1]]
colnames(mdat)[k[,2]]
Or both at once using mapply
:
mapply(`[[`, dimnames(mdat), k)
Solution 2
Subsetting the matrix first results in a one-element vector that has no names, as you show in your question. Remember that subsetting creates a completely new object via copying. There's no way to reference the original mdat
after subsetting.
This is more clear if you assign the result of subsetting to another object.
> m <- mdat[4]
> m
[1] 12
> names(m) # no names were printed above... so
NULL
You really want to access the column/row names first and subset them.
> colnames(mdat)[3]
[1] "C.3"
> rownames(mdat)[2]
[1] "row2"
You can re-assign column/row names similarly.
> colnames(mdat)[3] <- "C3"
> rownames(mdat)[2] <- "row.2"
> mdat
C.1 C.2 C3
row1 1 2 3
row.2 11 12 13
Author by
user1301593
Updated on January 09, 2020Comments
-
user1301593 over 4 years
So let's say I have a matrix, mdat and I only know the index number. How do I retrieve the column and row names? For example:
> 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
-
Aaron left Stack Overflow over 11 yearsIn reading this answer again, I wonder if the OP only had the overall index because they ran
which
withoutarr.ind=TRUE
. Future readers: if you're getting that index fromwhich
, usearr.ind=TRUE
to get the row and column indices, instead of usingarrayInd
.