如何从满足特定特征的矩阵中提取值

时间:2014-11-13 04:13:12

标签: r if-statement matrix correlation

我有以下相关矩阵correlation matrix

1 2 3 4 5 6 1 1.0000000 0.02108494 3.252095e-02 0.09734299 0.13358019 0.2405974 2 -0.4000000 1.00000000 3.844997e-08 0.03570393 0.05800796 0.1398141 3 -0.3730019 0.79262909 1.000000e+00 0.31386596 0.43753022 0.1695814 4 -0.2935198 -0.36689969 -1.808432e-01 1.00000000 0.05911566 0.2826286 5 -0.2666667 -0.33333333 -1.398757e-01 0.33195686 1.00000000 0.3298056 6 -0.2100903 -0.26261287 -2.448878e-01 -0.19270516 -0.17507524 1.0000000

其中对角线下方是相关指数,而对角线上方是p值。所以我想提取一对p值<1的数据。 <0.05但是相关指数> 0.5。我正在尝试这样的事情:

for (i in 1: 6){
for (j in i:6){
if( cor[i,j]<0.05 && cor[i,j]>0){
   correlacion1<-cbind(corx1[i,j]) }} }

只是为了提取p值<0.05的值,但它也没有用。很难在对角线以下指定差异特征

1 个答案:

答案 0 :(得分:0)

如果您实际发布数据而不是图像

会更好

您希望使用upper.trilower.tri将其转换为矢量。你可以绕过那些来创建一个捕获你想要的条件的二进制向量。然后,您可以通过vec2sm()

将该向量转换为矩阵
pVals = correlation[upper.tri(correlation)]
cors =  correlation[lower.tri(correlation)]
selected = vector(length=length(pVals))
selected[pVals<0.5 & cors>0]= TRUE
selectedMatrix = sm2vec(selected)

最后你会得到一个对称的二进制矩阵。如果需要,您可以将其转换为与graph.adjacency包中igraph的互动列表。您需要使用get.edgelist来获取实际的对列表