找到每列的最大值和最小值,然后找到每一行的最大值和最小值

时间:2014-11-12 17:44:10

标签: r matrix max minimum

我有这个矩阵:

a <- matrix(rnorm(1000 * 18, mean = 100, sd = sqrt(10)), 1000, 18)

我想找到每一列的最大值和最小值以及每一行的最大值和最小值。

4 个答案:

答案 0 :(得分:42)

想出来。

每列的最小值和最大值:

apply(a,2,min)
apply(a,2,max)

每行的最小值和最大值:

apply(a,1,min)
apply(a,1,max)

在此处找到信息http://www.personality-project.org/r/r.commands.html

答案 1 :(得分:3)

请参阅matrixStats包。您可以对列和行使用colMins()rowMaxs()和类似函数。

请参阅此答案:How to find the highest value of a column in a data frame in R?

答案 2 :(得分:3)

你可以尝试

apply(a, 1, range)

t一起使用,这会给你两列。第一个具有最小值的第二个具有最大行数。

head(t(apply(a, 1, range)))
         [,1]     [,2]
[1,] 95.75922 103.6956
[2,] 93.62636 106.3934
[3,] 92.70567 106.9190
[4,] 96.53577 104.4971
[5,] 96.61573 107.6691
[6,] 95.56239 105.5887

答案 3 :(得分:1)

即使需要首先将矩阵转换为列表(data.frame是列表的特例),也可以使用pmax()pmin()来代替行最大/最小:

apply(a,1,min)
apply(a,1,max)
# becomes
do.call(pmin, as.data.frame(a))
do.call(pmax, as.data.frame(a))

对于列,由于必须先进行转置,因此“竞争性”会降低:

apply(a,2,min)
apply(a,2,max)
# becomes
do.call(pmin, as.data.frame(t(a)))
do.call(pmin, as.data.frame(t(a)))

基准化

a <- matrix(rnorm(1000 * 18 *10, mean = 100, sd = sqrt(10)), 1000 * 10, 18 * 10)

microbenchmark::microbenchmark(
  do.call(pmin, as.data.frame(a)),
  apply(a,1,min),
  unit = "relative"
)
                            expr      min     lq     mean   median       uq       max neval
 do.call(pmin, as.data.frame(a)) 1.000000 1.0000 1.000000 1.000000 1.000000 1.0000000   100
                apply(a, 1, min) 2.281095 2.3576 2.096402 2.531092 2.618693 0.6284233   100