R:对值的滤波器相关矩阵>和<

时间:2017-12-01 11:44:41

标签: r filter correlation

我在R中编程并且具有巨大的相关矩阵。我想过滤这个矩阵,以便我只有包含值> 0.7或< -0.7的行和列。 我已经尝试了子集和过滤器,但并没有真正得到我想要的东西。另外一个问题是有很多行/列名称我不想对它们起作用。 有人可以帮忙吗?

例如

  1    2  3   4  
1 1    0  0.7 0.6  
2 0    1  0.6 0.6  
3 0.1  0  1   0.8  
4 -0.2 0  0.7 0.9  

应该返回

  1    3    4   
1 1    0.7  0.6  
3 0.1  1    0.8  
4 -0.2 0.7  0.9

1 个答案:

答案 0 :(得分:3)

将对角线归零并使用apply(..., 1, any)来查找具有值> =阈值的行(因此也是由于对称性导致的列)。

对于测试,如果cc是问题中的矩阵,那么我们使用cor(cc)threshold = 0.6代替,因为问题中的cc不是相关矩阵。< / p>

cc <- matrix(c(1, 0, 0.1, -0.2, 0, 1, 0, 0, 0.7, 0.6, 1, 0.7, 0.6, 0.6, 0.8, 0.9), 4)
cc <- cor(cc)

threshold <- 0.6
cc0 <- cc
diag(cc0) <- 0
ok <- apply(abs(cc0) >= threshold, 1, any)
cc[ok, ok]

,并提供:

           [,1]       [,2]
[1,]  1.0000000 -0.6375997
[2,] -0.6375997  1.0000000

最后两行代码可以替换为使用which(..., arr = TRUE)

获取条目坐标&gt; =阈值的代码
ix <- sort(unique(c(which(abs(cc0) >= threshold, arr = TRUE))))
cc[ix, ix]