我有一个大的方阵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)
)?感谢
答案 0 :(得分:5)
使用其他帖子中的m
和ind
作为测试数据,请尝试以下操作:
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))])