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)
我有一个 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)