R:最小值/最大值在矩阵中的位置

R: place of min / max in a matrix

我有一个 table 的 10 个变量和 193 个观察值(10 列和 193 行)

现在我为每一列找到了 min/max 和

#min
minINT <- apply(INT, 1, min)

#max
maxINT <- apply(INT, 1, max)

现在如何找到每行中 min/max 值的 "place"? (例如第 1 行 = 3 个变量;或第 156 行 = 7 个变量)

谢谢!

您的问题自相矛盾:它是您想要的每一行或每一列的最大值吗?我在下面假设您想​​要每行的最大值,因为这是您的代码正在做的事情。

which.min()which.max() return 分别是向量的最小值和最大值的位置。您可以将它们与 apply():

一起使用
#min
minINT_pos <- apply(INT, 1, which.min)

#max
maxINT_pos <- apply(INT, 1, which.max)

如果有平局,即如果几个元素取最大值或最小值,这将return这些元素中第一个的位置(感谢Richard Scriven的评论).

还有函数max.col(),return是每行最大值的索引。

maxINT_pos <- max.col(INT)

此函数与which.max()的不同之处在于,您可以指定平局时执行的操作。默认情况下,它会随机选择值,但您也可以设置 ties.method = "first"ties.method = "last" 来选择第一个(which.max())或最后一个元素。

此外,max.col()which.max()apply():

library(microbenchmark)
m <- matrix(runif(1000), ncol = 10)
microbenchmark(apply(m, 1, which.max), max.col(m))
## Unit: microseconds
##                    expr     min       lq      mean   median       uq     max neval cld
##  apply(m, 1, which.max) 190.883 200.7075 230.56125 211.5590 223.3115 529.712   100   b
##              max.col(m)  53.316  57.0905  69.54417  61.3835  71.2555 204.897   100  a 

min.col() 不存在,但您可以通过将矩阵乘以 -1 轻松获得最小值(感谢 nicola 的提示):

minINT_pos <- max.col(-INT)