vacio studio seleccionar funciones funcion filtrar filas eliminar datos data crear columnas r matrix max minimum

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