我有矩阵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)
}
要获得所有变量的结果,但会出现错误“要替换的项目数不是替换长度的倍数”。
我如何以正确的方式做到这一点?还有更简单的方法吗?
我们可以简化并在列上使用Apply以获得所需的结果:
k <- apply(ABS.Matrix, 2, function(x) names(sort(x, decreasing=TRUE))[1:10])
说明:对于ABS.Matrix
中的每一列,我们执行:
names
获取行名结果是一个字符矩阵
示例:
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"