我在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
答案 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)
ix <- sort(unique(c(which(abs(cc0) >= threshold, arr = TRUE))))
cc[ix, ix]