如何根据最终列值对矩阵中的列进行排序?

时间:2013-05-14 11:45:19

标签: r matrix

我正在尝试根据最终列值重新排序R中的现有矩阵,但我似乎无法找到解决方案。我试过订单(),但没有运气。我显然忽略了一些东西。有任何想法吗?例如,假设我们创建了一个包含5列数据的矩阵:

> a <-matrix(100+rnorm(50),10,5)
> a
           [,1]      [,2]      [,3]      [,4]      [,5]
 [1,] 101.26878  99.36657  99.32874  99.46449 101.46698
 [2,] 102.28284 102.62506 100.21430 100.54780 100.14608
 [3,]  99.25180 100.93911 101.31455  99.92939  99.87537
 [4,]  99.69423  99.17830  99.20230  99.42162 100.70614
 [5,]  99.03745  99.95904 100.85773  98.39691 100.84777
 [6,] 100.09040 101.66841  98.73320  97.41576  99.36144
 [7,]  99.94181 100.18932 101.26947  99.81551  99.30574
 [8,]  99.15694  98.24990  98.81500  99.26529 100.72547
 [9,] 100.52822  99.43562 101.73370  98.32482  99.30498
[10,] 100.37140  99.54621  99.37048  99.43794 101.28328

如何根据最终值对列重新排序并将结果保存在矩阵中?例如,列[,5]具有最高的最终值(101.28328),因此它将首先列在最左侧;列[,1]将是第二个,依此类推。谢谢!

2 个答案:

答案 0 :(得分:2)

这将有效:

a[,order(a[nrow(a),])]

答案 1 :(得分:0)

有人会打败我,但是......(这远非优化代码)

maxes <- pmax(a[,1],a[,2],a[,3],a[,4],a[,5])
colorder <- order(maxes)
a.order <- a[,colorder]

编辑 - 此答案在列中的任何位置找到最大值,但未被要求。弗兰克的回答是正确的。