studio - seleccionar columnas en r
Encuentre el valor máximo y mínimo de cada columna y luego encuentre el valor máximo y mínimo de cada fila (4)
Lo averigué.
Mínimo y máximo de cada columna:
apply(a,2,min)
apply(a,2,max)
Mínimo y máximo de cada fila:
apply(a,1,min)
apply(a,1,max)
Encontró la información aquí http://www.personality-project.org/r/r.commands.html
Tengo esta matriz:
a <- matrix(rnorm(1000 * 18, mean = 100, sd = sqrt(10)), 1000, 18)
Me gustaría encontrar el valor máximo y mínimo de cada columna y el valor máximo y mínimo de cada fila.
Puedes probar
apply(a, 1, range)
Usando esto junto con t
, esto le da dos columnas. El primero con el mínimo el segundo con el máximo de las filas.
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
Una alternativa más rápida para row max / min sería usar pmax()
y pmin()
aunque primero tendría que convertir la matriz en una lista (data.frame es un caso especial de una lista):
apply(a,1,min)
apply(a,1,max)
# becomes
do.call(pmin, as.data.frame(a))
do.call(pmax, as.data.frame(a))
Para las columnas, será menos "competitivo" por tener que transponer primero:
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)))
Benchmarking :
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
Vea el paquete matrixStats
. Puede usar colMins()
, rowMaxs()
y funciones como esta para columnas y filas.
Vea esta respuesta: ¿Cómo encontrar el valor más alto de una columna en un marco de datos en R?