您的位置:首页 > 其它

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

2015-08-27 00:56 881 查看

一、向量

最大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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: