Index value for matrix in R?

Shane picture Shane · Dec 1, 2009 · Viewed 43k times · Source

Is there a function to get an index (row number and column number) for a matrix?

Suppose that I have a simple matrix:

a <- matrix(1:50, nrow=5)

Is there an easy way to get back something like c(3, 5) for the number "23", for instance? In this case, saying which(a==23) just returns 23.

This seems to work but I'm sure that there's a better way:

matrix.index <- function(a, value) {
  idx <- which(data.frame(a)==value)
  col.num <- ceiling(idx/nrow(a))
  row.num <- idx - (col.num-1) * nrow(a)
  return(c(row.num, col.num))
}
> matrix.index(a, 23)
[1] 3 5
> matrix.index(a, 50)
[1]  5 10

Answer

Shane picture Shane · Dec 2, 2009

Just looked at the help for which() after posting this and found the answer: the arr.ind parameter.

which(a==23, arr.ind=TRUE)
     row col
[1,]   3   5