Я'ве получил эту матрицу:
a <- matrix(rnorm(1000 * 18, mean = 100, sd = sqrt(10)), 1000, 18)
Я хочу найти максимальное и минимальное значение в каждом столбце и максимальное и минимальное значение каждой строки.
Выяснил это.
Минимум и максимум каждого столбца:
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
Посмотреть пакет matrixStats
. Вы можете использовать colMins()
, `rowMaxs и функции () так как для столбцов и строк.
См. Этот ответ: https://stackoverflow.com/questions/24212739/how-to-find-the-highest-value-of-a-column-in-a-data-frame-in-r/39750306#39750306
Вы можете попробовать
apply(a, 1, range)
Используя это вместе с "т", это дает вам две колонны. Первый с минимальным второй с максимальным строк.
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
Более быструю альтернативу подряд макс/мин использовал бы рмакс()
и рміп()
хотя вы бы сначала преобразовать матрицу в список (сведения.рама-это частный случай списка):
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