获取R中矩阵每一行K个最小元素或最大元素的索引R

问题描述:

如何获取R中矩阵每一行K个最小元素或最大元素的索引?获取R中矩阵每一行K个最小元素或最大元素的索引R

E.g.我有矩阵:

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 

我试过几个命令使用sortapplyarrayIndwhich等,但仍无法获得期望的结果。 欢迎任何帮助。

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,你也可以用这个为连续两个最大:

t(apply(mat, 1, order)[ 5:4, ])  
+0

它返回我的值,但我想索引.. –

+0

@DWin我建议编辑将'递减'参数添加到'order'中以获得连续的X最大/最小元素。 –

+0

谢谢@BlueMagister –

什么

  • 找到k个最大值的索引在每一行

    apply(mat, 1, function(x, k) which(x <= max(sort(x, decreasing = F)[1:k]), arr.ind = T), k)` 
    
  • 发现ķ最小值的索引各行

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

在您的例子中,对于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的第二个参数从1更改为2以便搜索列。