2013-06-04 29 views
1

我有一个矩阵,它具有成对值但不对称,我的意思是,AxB与BxA不同。这是一个虚拟的例子:在矩阵中进行不对称配对比较

A B C D E 
A 1 0.7 0.8 0.8 0.9 
B 0.2 1 0.2 0.8 0.3 
C 0.3 0.4 1 0.5 0.6 
D 0.4 0.9 0.8 1 0.4 
E 0.8 0.2 0.8 0.8 1 

我需要知道有多少[i,j]比较是高于或低于0.7,多少比较[j,i]也高于0.7为了去除高冗余的元素相等。在该示例中,元素A具有B, C, D, and E的元素数量更多,因此应在进一步分析中将其删除。我在使用table命令该

table1 <- apply(M, 1, table) 
table2 <- apply(M, 2, table) 

以为然后比较表2表1去除多余的元素,它会是一个好方法吗?

谢谢

回答

1

你想处理的条目> 0.7?将它们设置为NA?删除它们?无论如何,这应该让你朝着正确的方向前进:

#Assumes your data is named x 
> which(x > 0.7, arr.ind = TRUE) 
#---- 
    row col 
A 1 1 
E 5 1 
B 2 2 
D 4 2 
... 

#Set values = NA 
x[which(x>0.7, arr.ind = TRUE)] <- NA 
#--- 
    A B C D E 
A NA 0.7 NA NA NA 
B 0.2 NA 0.2 NA 0.3 
C 0.3 0.4 NA 0.5 0.6 
D 0.4 NA NA NA 0.4 
E NA 0.2 NA NA NA 
+0

谢谢@Chase,我喜欢你的第二种方法。实际上,这些成对的值是AxB,BxA等之间的共享元素的数量,A是4个元素的列表,B是7个元素的列表。因此,我想删除那些在A,B,C中以高百分比共享的项目......按照您的方法,我可以统计行和列中的NAs数量,然后删除那些值高于阈值的值我选择,在这个虚拟的例子中,4/5元素中的共享索引高于0.7,因此我应该从我的矩阵中删除A. – user2380782

+1

较短版本:'x [x> 0.7] < - NA' – flodel