我有一个包含10个变量和193个观察值(10列和193行)的表
现在我在每列中找到了最小值/最大值
#min
minINT <- apply(INT, 1, min)
#max
maxINT <- apply(INT, 1, max)
如何找到每行中最小值/最大值的“位置”? (例如,第1行= 3变量;或第156行= 7变量)
谢谢!
答案 0 :(得分:3)
你在自己的问题中自相矛盾:它是你想要的每一行或每一列中的最大值吗?我假设你在下面想要每行的最大值,因为这是你的代码所做的。
which.min()
和which.max()
分别返回向量的最小值和最大值的位置。您可以将它们与apply()
:
#min
minINT_pos <- apply(INT, 1, which.min)
#max
maxINT_pos <- apply(INT, 1, which.max)
如果存在平局,即如果多个元素采用最大值或最小值,则会返回第一个元素的位置(感谢Richard Scriven注释)。
还有功能max.col()
,它返回每行中最大值的索引。
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)