8

Rの行列の各行でK個の最小要素または最大要素のインデックスを取得する方法は?

たとえば、マトリックスがあります:

2   3   1  65  2
46  7   9  3   2
9   45  3  5   7
24  65  87 3   6
34  76  54 33  6

各行で、たとえば2つの最小要素(何らかの方法でタイを破る)のインデックスマトリックスを取得したいと思います。結果は次の形式になります。

3 1
5 4
3 4
4 5
5 4

sortapply、などを使用していくつかのコマンドを試しましたがarrayIndwhichまだ目的の結果を得ることができません。どんな助けでも大歓迎です。

4

2 に答える 2

12
apply(mat, 1, which.max)  #.....largest
apply(mat, 1, which.min)  #.....smallest

t(apply(mat, 1, sort)[ 1:2, ])  # 2 smallest in each row

t(apply(mat, 1, order)[ 1:2, ])  # indices of 2 smallest in each row

減少=TRUE を使用する以外に、これを連続する 2 つの最大値に使用することもできます。

t(apply(mat, 1, order)[ 5:4, ])    
于 2012-12-24T06:12:20.827 に答える
0

どうですか

  • 各行の k 個の最大値のインデックスを見つける

    apply(mat, 1, function(x, k) which(x <= max(sort(x, decreasing = F)[1:k]), arr.ind = T), k)`
    
  • 各行の k 個の最小値のインデックスを見つける

    apply(mat, 1, function(x, k) which(x >= min(sort(x, decreasing = T)[1:k]), arr.ind = T), k)`
    

あなたの例では、 for k <- 2、前者の結果は

     [,1] [,2] [,3] [,4] [,5]
[1,]    2    1    1    2    2
[2,]    4    3    2    3    3

後者の結果は

[[1]]
[1] 1 3 5

[[2]]
[1] 4 5

[[3]]
[1] 3 4

[[4]]
[1] 4 5

[[5]]
[1] 4 5

apply列を検索するために、 の 2 番目のパラメーターを 1 から 2 に変更します。

于 2015-12-03T09:47:51.817 に答える