【问题标题】:R: Find index of Matrix with smallest value [duplicate]R:查找具有最小值的矩阵的索引[重复]
【发布时间】:2013-07-09 15:13:07
【问题描述】:

给定矩阵

x <- matrix(c(1,2,3,4), nrow=2, ncol=2)
colnames(x) <- c('a','b')
rownames(x) <- c('c','d')

如何找到最小值的列索引/名称和行索引/名称?

我试过 which.min,但我需要获取行/列索引而不是元素。有什么想法吗?

【问题讨论】:

  • 我猜你的意思是colnames(x)&lt;-c('a','b','c','d')
  • 天哪,我在谷歌上找不到这个问题,也许是措辞......如果你愿意,我们可以关闭它

标签: r


【解决方案1】:

您可以使用which

which(x == min(x), arr.ind = TRUE)

例如:

x <- matrix(c(1, 2, 0, 4), nrow = 2, ncol = 2)
which(x == min(x), arr.ind = TRUE)
##      row col
## [1,]   1   2

【讨论】:

  • +1 -- arrayInd(which.min(x), dim(x)) 应该更快(x == min(x) 很贵)。它将始终返回第一个最小值,而您的将返回所有最小值。
  • @flodel,我使用 R 已经快十年了,这是我第一次看到为which.min 提供arr.ind 功能的快捷方式,高效,没有x == min(x) 的“成本”和浮点“风险”。惊人的!每天学习新东西。 (被?which紧密收录的事实有点尴尬……)
【解决方案2】:

如果您想将矩阵视为向量,您可以使用which.min

which.min(x)
# > [1] 1
which.max(x)
# > [1] 4

作为第一个和第四个元素。

您还可以找到最大值并返回带有位置的有序向量(但不是最小值)

max.col(x)
# [1] 2 2

【讨论】:

  • 好吧,然后max.col(-x)。但这给出了 每一行 的最小值的位置,而不是 OP 所追求的位置。
猜你喜欢
  • 1970-01-01
  • 2014-09-22
  • 2022-01-23
  • 2013-07-10
  • 1970-01-01
  • 1970-01-01
  • 2021-01-13
  • 2018-08-29
  • 2017-12-01
相关资源
最近更新 更多