2

我有一个大方阵12128 x 12128。例子

      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)) 更简单的方法?谢谢

4

2 回答 2

5

使用mind从另一篇文章作为测试数据试试这个:

m[ind]

编辑:

如果行名和列名可以重复(如后面的评论中所建议的那样)并且如果我们想要这些中的所有可能值,那么试试这个:

merge(as.data.frame.table(m), ind, by = 1:2)
于 2011-12-25T23:21:16.827 回答
1

我对这种方法的性能特征不做任何承诺,因为您的实际数据相当大,但这至少可以为您提供必要的工具来使用:

#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))])
于 2011-12-25T21:51:58.353 回答