行列mが与えられれば、mの上位kの値を見つけ、それらが属する列/行を正確に見つける直接的な方法があります。私はSO上に何も見つからなかったので、この質問をしました。私はこれが原因で、私は行列の全体の値をソートするのではなく、それらのk値を拾っていた理由で効率的であるかどうかわからないのですマトリックスのトップn値のカラムインデックスを効率的に見つける方法は?
set.seed(1729)
k=5 #top 5
m = matrix(round(runif(30),digits = 2),nr=10)
idx <- which(matrix(m %in% head(sort(m), k), nr = nrow(m)), arr.ind = TRUE)
print(m)
[,1] [,2] [,3]
[1,] 0.59 0.54 0.57
[2,] 0.44 0.43 0.32
[3,] 0.57 0.08 0.29
[4,] 0.35 0.58 0.24
[5,] 0.86 0.52 0.53
[6,] 0.41 0.78 0.17
[7,] 0.51 0.47 0.26
[8,] 0.15 0.81 0.49
[9,] 0.85 0.64 0.64
[10,] 1.00 0.78 0.95
print(idx)
row col
[1,] 8 1
[2,] 3 2
[3,] 4 3
[4,] 6 3
[5,] 7 3
: 上記の私の試みはこれをされています。私はk < <の長さ(m)と仮定したいと思います。 は1つが上位k個の列名
例えばを取得したいときのようなシナリオでを複製で私を助けることができる任意の方法があるにも大行列mのための任意の効率的な方法があります、と:で行列のmm、私は最小値を持つ上位2列を識別する必要があります。ここで、次のケースでは、列1と列2を期待しています。
mm = matrix(c(6,6,7,8,7,9,8,8,9), 3)
print(mm)
[,1] [,2] [,3]
[1,] 6 8 8
[2,] 6 7 8
[3,] 7 9 9
idx <- which(matrix(mm %in% head(sort(mm), 2), nr = nrow(mm)), arr.ind = TRUE)
print(idx)
row col
[1,] 1 1
[2,] 2 1
ただし、ここでは1つの列しか取得できません。 1、この場合、出力は最小値を有する2つの異なる列でなければならない。 1と2
最初の部分については、[this post](http://stackoverflow.com/questions/3692563/how-to-return-5-topmost-values-from-vector-in-r)を参照してください。基本的には、 'sort.int'と' partial = TRUE'を使って並べ替えを高速化します。 – Barker
申し訳ありませんが、私は 'partial = 1:k'を意味しました。 – Barker
リンクありがとう!これは何らかの方法で便利です。 – rahulkmishra