Разбить квадратную матрицу на пары - PullRequest
2 голосов
/ 26 декабря 2011

У меня большая квадратная матрица 12128 x 12128. Пример * +1002 *

      A    B    C    D     E
A    0.5  0.4  0.1  0.02  0.4
B    0.1  0.3  0.07 0.03  0.9
C    0.8  0.04 0.5  0.4   0.4
D    3.4  5.6  9.5  2     2.1
E    0.6  9.1  0.3  0.5   1.2

У меня есть список пар (# 18000), которые существуют во всех возможных парах из матрицы

 A   B
 B   E
 C   E

Мне нужны значения только для пар в моем списке из матрицы. Есть ли более простой способ сделать это, чем разбивать всю матрицу (melt(matrix))? Спасибо

Ответы [ 2 ]

5 голосов
/ 26 декабря 2011

Используя m и ind из другого поста в качестве тестовых данных, попробуйте это:

m[ind]

РЕДАКТИРОВАТЬ:

Если имена строк и столбцов могут иметь дубликаты (как предлагаетсяв последующем комментарии) и если мы хотим получить все возможные значения из них, попробуйте это:

merge(as.data.frame.table(m), ind, by = 1:2)
1 голос
/ 26 декабря 2011

Я не даю никаких обещаний по поводу характеристик производительности этого метода, поскольку ваши фактические данные довольно велики, но это может по крайней мере дать вам необходимые инструменты для работы:

#Some example data like yours
m <- matrix(1:25,5,5)
rownames(m) <- letters[1:5]
colnames(m) <- letters[1:5]

#Matrix of row/col indices to select
ind <- cbind(c('a','e','b'),c('d','a','d'))

#Select elements of m matching ind
diag(m[match(ind[,1],rownames(m)),match(ind[,2],colnames(m))])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...