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

xpcnnkqh  于 2023-04-18  发布在  其他
关注(0)|答案(5)|浏览(126)

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

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。如何返回行索引,在本例中是第2行?

wvt8vs2t

wvt8vs2t1#

参见?which.max

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

5hcedyr02#

请参阅?order。您只需要最后一个索引(或第一个,按降序排列),所以这应该可以做到这一点:

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

lrl1mhuk3#

下面的例子如何,其中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章以获得更多想法。

fsi0uk1n

fsi0uk1n4#

使用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
jexiocij

jexiocij5#

有一个函数max.col()。对于每一行,它都会找到哪一列具有最大值:

max.col(mat)
[1] 3 3 3

要找到每列的最大行,只需转置矩阵:

max.col(t(mat))
[1] 2 2 2

相关问题