将方矩阵分成两对

时间:2011-12-25 21:20:48

标签: r matrix data-manipulation

我有一个大的方阵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))?感谢

2 个答案:

答案 0 :(得分:5)

使用其他帖子中的mind作为测试数据,请尝试以下操作:

m[ind]

编辑:

如果行名和列名可以有重复项(如后面的注释中所述),并且如果我们想要这些中的所有可能值,请尝试以下操作:

merge(as.data.frame.table(m), ind, by = 1:2)

答案 1 :(得分: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))])