Найти соответствующий номер строки и столбца для индексированного элемента в матрице - PullRequest
1 голос
/ 14 сентября 2011

Я хотел бы получить (и сохранить) соответствующий номер строки и столбца в матрице, например.к номеру элемента 12.

adj.m <- diag(c(3,2,1),nrow = 3, ncol = 3)

Теперь я хочу найти строку, соответствующую элементу 4 или 5 или любой другой.adj.m[4] возвращает значение (0), но я хочу получить и сохранить в переменной соответствующие номера строк и столбцов (в данном случае 1 и 2).

Я предполагаю, что это простая команда, ноЯ не мог сформулировать вопрос, что Rseek или Google возвращают ответ.

Ответы [ 3 ]

3 голосов
/ 14 сентября 2011

думаю which() будет работать

x <- matrix(nrow=3, ncol=3, data=seq(1:9))
which(x==6, arr.ind=TRUE)
1 голос
/ 14 мая 2013

Попробуйте функцию arrayInd:

arrayInd(7, .dim=c(3,3))
#      [,1] [,2]
# [1,]    1    3
1 голос
/ 14 сентября 2011

Если i - ваш индекс, а m - ваша матрица, тогда строку и столбец i можно получить с помощью

get_row <- function(i, m) (i-1) %% ncol(m) + 1
get_col <- function(i, m) ((i-1) %/% ncol(m)) + 1

Использование, например,

get_row(4, adj.m)
get_col(4, adj.m)

На самом деле, ответ Иана, возможно, более естественный. Вы можете заключить его в функцию как

get_row_col <- function(i, m)
{
  x <- array(seq_along(m), dim = dim(m))
  which(x == i, arr.ind = TRUE)
}

Это также работает в более чем двух измерениях, например,

m <- array(1:24, dim = 2:4)
get_row_col(1:24, m)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...