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

Posted

技术标签:

【中文标题】使用R查找包含最大值的行索引【英文标题】:Finding row index containing maximum value using R 【发布时间】:2010-10-19 02:54:40 【问题描述】:

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

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

【问题讨论】:

【参考方案1】:

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

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

【讨论】:

+1 我喜欢这个答案,因为它让我可以轻松查看前几名,而不仅仅是最大值。我发现它对于从另一列查找接近最大值的日期很有用。 但请记住,这比 which.max 慢,因为您需要对整个列进行排序:) @bartektartanus 你怎么认为 which.max 算出最大值? :p 当然不用排序。找出最大值需要 O(n),排序需要更多时间:) 我对等级和顺序感到困惑。 order 返回每​​个元素的索引,但按元素的值排序。 rank 返回每​​个元素将拥有的索引,如果列表首先排序的话。因此order 返回当前索引值;并被用作熊猫术语中的“索引器”。【参考方案2】:

?which.max

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

【讨论】:

【参考方案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 章。

【讨论】:

以上是关于使用R查找包含最大值的行索引的主要内容,如果未能解决你的问题,请参考以下文章

sql server:索引视图包含每组最大的行

哈希函数为“查找包含P中最大点数的行”

pandas使用argmax函数返回给定series对象中最大值(maxmaximum)的行索引实战

查找具有最大行数的索引

使用 Pandas 查找列的最大值并返回相应的行值

Postgres:查找具有最大值的行