我正在研究R中的矩阵,230 x 230,我想要提取矩阵中的10个(或任何其他数字除外)最大输入,包括它们的位置和值。
额外的问题是这是一个相似性矩阵,所以我在对角线上有1个,当然我想要离开最大搜索。
任何想法或命令?
答案 0 :(得分:4)
一般来说,一个简洁的方法是使用未充分利用的arrayInd
函数,它为普通的jane向量位置提供行和列位置。这就是which(..., arr.ind = TRUE)
如何做到的。以下是您的表现方式:
## creating a random 230x230 matrix
n <- 230;
set.seed(1);
m <- matrix(sample.int(100000, n*n, replace = TRUE), n, n);
diag(m) <- 1;
## function to return n largest values and position for matrix m
nlargest <- function(m, n, sim = TRUE) {
mult <- 1;
if (sim) mult <- 2;
res <- order(m)[seq_len(n) * mult];
pos <- arrayInd(res, dim(m), useNames = TRUE);
list(values = m[res],
position = pos)
}
diag(m) <- NA;
nlargest(m, 10);
# $values
# [1] 1 2 11 12 12 12 13 18 21 22
#
# $position
# row col
# [1,] 59 95
# [2,] 178 202
# [3,] 160 34
# [4,] 83 151
# [5,] 150 194
# [6,] 18 225
# [7,] 13 38
# [8,] 206 182
# [9,] 89 22
#[10,] 142 99