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

发布于 2024-07-16 15:34:27 字数 242 浏览 3 评论 0原文

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

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。如何返回行索引,在本例中为 row二?

Given the following matrix lets assume I want to find the maximum value in column two:

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

I know max(mat[,2]) will return 8. How can I return the row index, in this case row two?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(5

爱你不解释 2024-07-23 15:34:27

请参阅 ?which.max

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

See ?which.max

> which.max( matrix[,2] )
[1] 2
冰雪之触 2024-07-23 15:34:27

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

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

See ?order. You just need the last index (or first, in decreasing order), so this should do the trick:

order(matrix[,2],decreasing=T)[1]
ま柒月 2024-07-23 15:34:27

下面怎么样,其中 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 章,了解更多想法。

How about the following, where y is the name of your matrix and you are looking for the maximum in the entire matrix:

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

if you want to extract the row:

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

To return sorted rows use:

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

The advantage of this approach is that you can change the conditional inside to anything you need. Also, using col(y) and location of the hanging comma you can also extract columns.

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

To find just the row for the max in a particular column, say column 2 you could use:

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

again the conditional is flexible to look for different requirements.

See Phil Spector's excellent "An introduction to S and S-Plus" Chapter 5 for additional ideas.

美男兮 2024-07-23 15:34:27

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

A different way using 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
心在旅行 2024-07-23 15:34:27

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

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

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

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

There is a function max.col(). For every row it finds which column has the maximum value:

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

To find the maximum row for each column instead, simply transpose the matrix:

max.col(t(mat))
[1] 2 2 2
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文