获得最大相关变量名称的迭代

问题描述 投票:1回答:1

我有矩阵ABS.Matrix,其中包含相关矩阵的绝对值。矩阵的尺寸为224 * 224。

对于所有变量,我需要选择前10个最大相关的名称。

对于单变量,我可以如下确定它:

A<-head(colnames(rbind(sort(ABS.Matrix[,2],decreasing=TRUE))),10)
B<-head(colnames(rbind(sort(ABS.Matrix[,224],decreasing=TRUE))),10)

例如,对于变量n.2 e 224。

如果我这样做:

cbind(A,B)

我得到一个矩阵,其中两列是前10个最大的相关变量名称。我需要对其进行迭代,并为所有224个变量获得相同的结果。

我尝试过:

for (k in 1:224){
  X[k]=head(colnames(rbind(sort(ABS.Matrix[,k],decreasing=TRUE))),10) 
}

要获得所有变量的结果,但会出现错误“要替换的项目数不是替换长度的倍数”。

我如何以正确的方式做到这一点?还有更简单的方法吗?

r
1个回答
0
投票

我们可以简化并在列上使用Apply以获得所需的结果:

k <- apply(ABS.Matrix, 2, function(x) names(sort(x, decreasing=TRUE))[1:10])

说明:对于ABS.Matrix中的每一列,我们执行:

  1. 按降序排列列
  2. 使用names获取行名
  3. 选择前10个元素

结果是一个字符矩阵

编辑:

示例:

1。创建minimal reproducible example数据:

set.seed(145)
ABS.Matrix <- matrix(runif(4*4), ncol=4)
rownames(ABS.Matrix) <- paste0("r", 1:4)
colnames(ABS.Matrix) <- paste0("c", 1:4)

示例数据:

ABS.Matrix
          c1        c2        c3        c4
r1 0.7539312 0.7042628 0.8561452 0.7011781
r2 0.5340212 0.6432927 0.9614117 0.4876268
r3 0.8568702 0.9716768 0.9147102 0.6565614
r4 0.9237723 0.8538198 0.0656714 0.1375255

2。使用上面的代码:

k <- apply(ABS.Matrix, 2, function(x) names(sort(x, decreasing=TRUE))[1:2])

k现在是:

      c1   c2   c3   c4  
[1,] "r4" "r3" "r2" "r1"
[2,] "r3" "r4" "r3" "r3"
© www.soinside.com 2019 - 2024. All rights reserved.