128

给定以下矩阵,假设我想在第二列中找到最大值:

mat <- matrix(c(1:3,7:9,4:6), byrow = T, nc = 3)
mat
     [,1] [,2] [,3]
[1,]    1    2    3
[2,]    7    8    9
[3,]    4    5    6

我知道max(mat[,2])会返回 8。如何返回行索引,在这种情况下为第二行?

4

3 回答 3

182

?which.max

> which.max( matrix[,2] )
[1] 2
于 2009-04-13T11:44:58.150 回答
29

?order。您只需要最后一个索引(或第一个,按降序排列),所以这应该可以解决问题:

order(matrix[,2],decreasing=T)[1]
于 2009-04-13T11:33:40.033 回答
3

以下怎么样,其中 y 是矩阵的名称,并且您正在寻找整个矩阵中的最大值:

row(y)[y==max(y)]

如果要提取行:

y[row(y)[y==max(y)],] # this returns unsorted rows.

要返回已排序的行,请使用:

y[sort(row(y)[y==max(y)]),]

这种方法的优点是您可以将内部条件更改为您需要的任何内容。此外,还col(y)可以使用悬挂逗号的位置和位置来提取列。

y[,col(y)[y==max(y)]]

要查找特定列中最大值的行,例如第 2 列,您可以使用:

seq(along=y[,2])[y[,2]==max(y[,2])]

再次,条件是灵活的,以寻找不同的要求。

有关其他想法,请参阅 Phil Spector 出色的“S 和 S-Plus 简介”第 5 章。

于 2015-11-09T17:07:03.910 回答