cda

您的位置:首页 > 精彩阅读 > R语言-找出向量或矩阵中的最大10个数

R语言-找出向量或矩阵中的最大10个数

2018-03-14

R语言-找出向量或矩阵中的最大10个数

一、向量

最大10的数的索引(位置),可先按降序排序,得到索引号,然后将前10个取出即可。

建议方法:
order(x,decreasing=TRUE)[1:10]
过程详解:
1、测试数据x

> x
[1] 0.00 0.00 0.00 0.00 0.00 0.00 0.06 0.09 0.20 0.09 0.08 0.14 0.14 0.23
[15] 0.08 0.06 0.12 0.20 0.14 0.11 0.20 0.14 0.17 0.15 0.18 0.15 0.20 0.12
[29] 0.23 0.08 0.12 0.08 0.23 0.12 0.08 0.17 0.18 0.17 0.12 0.17 0.14 0.18
[43] 0.11 0.27 0.06

2、按降序排序

> order(x,decreasing=TRUE)
[1] 44 14 29 33  9 18 21 27 25 37 42 23 36 38 40 24 26 12 13 19 22 41 17 28
[25] 31 34 39 20 43  8 10 11 15 30 32 35  7 16 45  1  2  3  4  5  6
>

3、这里就能取出最大10个数的索引了
> order(x,decreasing=TRUE)[1:10]
[1] 44 14 29 33  9 18 21 27 25 37

4、可以看一下,这取出的10个数的索引是不是指向最大的十个数。
> x[order(x,decreasing=TRUE)[1:10]]
[1] 0.27 0.23 0.23 0.23 0.20 0.20 0.20 0.20 0.18 0.18

二、矩阵

首先设定有矩阵y,9行5列,求最大的10个数的索引。

> y

[,1] [,2] [,3] [,4] [,5]
[1,] 0.00 0.09 0.14 0.12 0.18
[2,] 0.00 0.08 0.11 0.23 0.17
[3,] 0.00 0.14 0.20 0.08 0.12
[4,] 0.00 0.14 0.14 0.12 0.17
[5,] 0.00 0.23 0.17 0.08 0.14
[6,] 0.00 0.08 0.15 0.23 0.18
[7,] 0.06 0.06 0.18 0.12 0.11
[8,] 0.09 0.12 0.15 0.08 0.27
[9,] 0.20 0.20 0.20 0.17 0.06

解答方法:

1、使用sore.list()进行排序

> arrayInd(sort.list(y,decreasing=T)[1:10],dim(y))
      [,1] [,2]
[1,]    8    5
[2,]    5    2
[3,]    2    4
[4,]    6    4
[5,]    9    1
[6,]    9    2
[7,]    3    3
[8,]    9    3
[9,]    7    3
[10,]    1    5

2、使用order()函数进行排序

错误的方法:

> arrayInd(which(order(y, decreasing = TRUE) <= 10), dim(y))
      [,1] [,2]
[1,]    5    1
[2,]    3    4
[3,]    4    4
[4,]    1    5
[5,]    4    5
[6,]    5    5
[7,]    6    5
[8,]    7    5
[9,]    8    5
[10,]    9    5

which(order(y, decreasing = TRUE) <= 10)含义是先将数据进行排序,然后取索引小于等于10的,最大的10个数在排完序后,索引不应是<=10,而是排在前10位的就是最大的10个数的索引。
正确的方法:
> arrayInd(order(y,decreasing=TRUE)[1:10],dim(y))
      [,1] [,2]
[1,]    8    5
[2,]    5    2
[3,]    2    4
[4,]    6    4
[5,]    9    1
[6,]    9    2
[7,]    3    3
[8,]    9    3
[9,]    7    3
[10,]    1    5

完 谢谢观看

分享
收藏

OK