使用 R 查找包含最大值的行索引

给定下面的矩阵,让我们假设我想找到第二列中的最大值:

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。我如何返回行索引,在这种情况下是第二行?

164279 次浏览

参见 ?order。你只需要最后一个索引(或者第一个索引,以减少的顺序) ,所以这应该可以解决问题:

order(matrix[,2],decreasing=T)[1]

参见 ?which.max

> which.max( matrix[,2] )
[1] 2

下面的例子怎么样,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)]]

为了找到特定列中的 max 行,比如说第2列,您可以使用:

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

条件是灵活的寻找不同的需求。

参见菲尔斯佩克特的优秀“介绍 S 和 S-Plus”第5章的其他想法。

使用 dplyr 的另一种方式:

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


mat %>% as_tibble() %>% filter( V2 == max(V2) )


# A tibble: 1 x 3
V1    V2    V3
<int> <int> <int>
1     7     8     9