R 在矩阵中进行不对称成对比较
我有一个成对值的矩阵,但不是对称的,我的意思是,AxB和BxA不一样。下面是一个虚拟示例:R 在矩阵中进行不对称成对比较,r,R,我有一个成对值的矩阵,但不是对称的,我的意思是,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 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和E
,应在进一步分析中删除。我考虑过使用table
命令来实现这一点
table1 <- apply(M, 1, table)
table2 <- apply(M, 2, table)
table1您想如何处理>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
#假设您的数据名为x
>其中(x>0.7,arr.ind=TRUE)
#----
行列
A 11
E 5 1
B 2 2
D 4 2
...
#设定值=NA
x[哪个(x>0.7,arr.ind=TRUE)]您想如何处理>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
#假设您的数据名为x
>其中(x>0.7,arr.ind=TRUE)
#----
行列
A 11
E 5 1
B 2 2
D 4 2
...
#设定值=NA
x[其中(x>0.7,arr.ind=TRUE)]谢谢@Chase,我喜欢你的第二种方法。实际上,这些成对值是AxB、BxA等之间共享元素的数量,即4个元素的列表和7个元素的列表。因此,我想删除那些在a,B,C。。。按照您的方法,我可以在行和列中计算NAs的数量,然后删除那些值高于我选择的阈值的NAs,在这个虚拟示例中,4/5个元素中的共享索引将高于0.7,因此我应该从矩阵中删除。较短的版本:x[x>0.7]谢谢@Chase,我喜欢您的第二种方法。实际上,这些成对值是AxB、BxA等之间共享元素的数量,即4个元素的列表和7个元素的列表。因此,我想删除那些在a,B,C。。。按照您的方法,我可以在行和列中计算NAs的数量,然后删除那些值高于我选择的阈值的NAs。在这个虚拟示例中,4/5个元素中的共享索引高于0.7,因此我应该从矩阵中删除。较短的版本:x[x>0.7]