使用特定值从相关矩阵中提取行名和列名

extract rownames and column names from correlation matrix using aspecefic value

我的目标是消除数据集中的重复项。

为此,我编写了一个计算相关性的程序。

我想取相关性高于我确定的特定值的变量的名称。

这是我得到的结果之一。

            M926T709  M927T709_1  M927T709_2  M929T709
M926T709   1.0000000  0.9947082  0.9879702   0.8716944
M927T709_1 0.9947082  1.0000000  0.9955145   0.8785669
M927T709_2 0.9879702  0.9955145  1.0000000   0.8621052
M929T709   0.8716944  0.8785669  0.8621052   1.0000000

假设我想获取百分比高于 95% 的变量的名称

所以我应该得到这个结果

M926T709 , M927T709_1 , M927T709_2

编辑:Ronak Shah 给出的答案效果很好,但我需要将结果作为向量获取,以便我可以使用

之后的名称

注意,我不应该分析正交结果,因为它们总是等于 1。

如果您需要任何说明,请告诉我,如果您想查看我的整个程序,请告诉我。

示例数据:limit 和相关矩阵 m(为演示目的添加负相关):

  limit <- 0.95
  m <- as.matrix( read.table(text = "
            M926T709  M927T709_1  M927T709_2  M929T709
M926T709   1.0000000  -0.9947082  0.9879702   0.8716944
M927T709_1 -0.9947082  1.0000000  0.9955145   0.8785669
M927T709_2 0.9879702  0.9955145  1.0000000   0.8621052
M929T709   0.8716944  0.8785669  0.8621052   1.0000000"))

创建所需矩阵的子集并提取 row/column 个名称。

Target <- unique( # Remove any duplicates
  unlist( # merge subvectors of the `dimnames` list into one 
    dimnames( # gives all names of rows and columns of the matrix below
      # Create a subset of the matrix that ignores correlations < limit
      m[rowSums(abs(m) * upper.tri(m) > limit) > 0, # Rows
        colSums(abs(m) * upper.tri(m) > limit) > 0] # Columns
    ), 
    recursive = FALSE))

Target
#> [1] "M926T709"   "M927T709_1" "M927T709_2"

reprex package (v2.0.1)

于 2021-10-25 创建

使用 rowSumscolSums 您可以分别计算每行和每列中有多少个值大于 0.95,然后 return 名称。

tmp <- mat > 0.95
diag(tmp) <- FALSE
names(Filter(function(x) x > 0, rowSums(tmp) > 0 | colSums(tmp) > 0))
#[1] "M926T709"   "M927T709_1" "M927T709_2"