在一个矩阵中查找最大值所在的行和列索引

69

我希望找到矩阵中的最大元素值以及其位置(在矩阵中的行和列ID)。

我正在使用以下函数返回矩阵的行和列。

这似乎是一种不好的方法——我可能错过了一种原生方法。有更好/更符合R风格的方法吗?

这是我的函数:

matxMax <- function(mtx)
{
    colmn <- which(mtx == max(mtx)) %/% nrow(mtx) + 1
    row <- which(mtx == max(mtx)) %% nrow(mtx)
    return( matrix(c(row, colmn), 1))
}

我使用的方式如下:

mm <- matrix(rnorm(100), 10, 10)
maxCords <- matxMax(mm)
mm[maxCords]

解决方案是相同的,但我进行了搜索,我认为在最大值和最小值下都有一个解决方案的情况(我记得也要搜索最小值)。此外,该函数(虽然在这种情况下是多余的)可能具有一些教育价值。 - ricardo
1个回答

129

你可以做

## Some data
set.seed(123)
mm <- matrix(rbinom(40, 20, 0.5), 8, 5)
mm
#      [,1] [,2] [,3] [,4] [,5]
# [1,]    9   10    8   11   11
# [2,]   12   10    6   11   12
# [3,]    9   14    9   10    6
# [4,]   13   10   14   11   10
# [5,]   13   11   13    9   12
# [6,]    6   10   11    8    8
# [7,]   10    7   11   14    9
# [8,]   13   13   16   13    8

which(mm == max(mm), arr.ind = TRUE)
#      row col
# [1,]   8   3

5
有没有办法找到第二大的值所在的位置?第二大的值可能与最大的值相同,在这种情况下,我想获取第二大值所在的位置,该位置将与最大值完全相同。 - user2543622
3
@user2543622,你尝试在你的设置中使用建议的解决方案了吗?建议的解决方案提供了矩阵中所有等于最大值的元素列表。因此,如果存在并列,您将得到它们所有的元素。 - QuantIbex
@user2543622,这是一个前十名单:which(mm >= tail(sort(mm), n=10)[1], arr.ind=TRUE) - Lori

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接