Rango en R con la función range()

Estadística con R Medidas de dispersión
Función range() en R

La función range se utiliza para obtener el rango de un conjunto de valores numéricos o de caracteres, es decir, los valores mínimo y máximo de un vector numérico o el primer y último elemento de un vector de caracteres ordenado alfabéticamente.

Sintaxis

La función range en R tiene la sintaxis que se describe a continuación:

range(..., # Objecto numérico o carácter
      na.rm = FALSE,  # Si TRUE, elimina valores faltantes
      finite = FALSE) # Si TRUE, elimina valores no finitos

Esta función devuelve un vector con dos elementos, donde el primer elemento es el valor mínimo y el segundo elemento es el valor máximo.

Rango de un vector numérico

Dado un vector numérico llamado x se puede obtener su rango pasando el objeto a la función range.

# Vector numérico de muestra
x <- c(10, 1, 14, -5, 4)

# Rango de 'x'
range(x)

# Equivalente a:
# c(min(x), max(x))
-5 14

El código anterior devuelve un vector de dos elementos con -5 (el valor mínimo) y 14 (el valor máximo).

Sin embargo, si el vector contiene valores NA, la función devolverá NA NA, como se ilustra a continuación.

# Vector numérico de muestra con un valor faltante
x <- c(10, 1, 14, NA, -5, 4)

# Rango de 'x'
range(x)
NA NA

Para resolver este problema, deberás establecer na.rm = TRUE, de forma que los valores que falten se omitan antes del cálculo.

# Vector numérico de muestra con un valor faltante
x <- c(10, 1, 14, NA, -5, 4)

# Rango de 'x'
range(x, na.rm = TRUE)
-5 14

El vector también puede contener valores no finitos, como Inf. En este caso, la función tendrá en cuenta estos valores.

# Vector numérico de muestra con un Inf
x <- c(10, 1, 14, Inf, -5, 4)

# Rango de 'x'
range(x)
-5 Inf

Para eliminar los valores no finitos puedes establecer finite = TRUE, de modo que sólo se tendrán en cuenta los valores finitos.

# Vector numérico de muestra con un Inf
x <- c(10, 1, 14, Inf, -5, 4)

# Rango de 'x'
range(x, finite = TRUE)
-5 14

Rango de un vector de caracteres

La función range también admite vectores de caracteres. En este caso, la función ordenará los valores alfabéticamente y devolverá el primer y el último elemento, como se ilustra en el ejemplo siguiente.

# Vector de caracteres de muestra
y <- c("and", "sand", "band")

# Rango de 'y'
range(y)
"and"  "sand"

La función devuelve "and" y "sand", ya que son el primer y último elemento si y se ordena alfabéticamente.

Rango de un data frame o matriz

Si se pasa un data frame (con tipos de datos homogéneos) o una matriz como entrada a range la función devolverá el rango de los valores de todo el objeto.

# Data frame de muestra
df <- data.frame(x = c(0, 1, 3), y = c(5, 2, 4))

# Rango de 'df'
range(df)
0 5

La salida es 0 5, ya que 0 y 5 son los valores mínimo y máximo entre todas las columnas, respectivamente.

Rango para cada columna de un data frame o matriz

Si quieres calcular el rango de cada columna de un data frame o matriz deberás utilizar la función apply como se muestra en el siguiente ejemplo.

# Sample data frame
df <- data.frame(x = c(0, 1, 3), y = c(5, 2, 4))

# Rango de cada columna de 'df'
apply(df, 2, range)
     x y
[1,] 0 2
[2,] 3 5

El rango de la columna x es 0 3 y el de la columna y es 2 5.

La función extendrange

La función extendrange amplía el rango de un vector numérico en un pequeño porcentaje a ambos lados. El porcentaje por defecto es 0.05.

# Vector numérico de muestra
x <- c(10, 1, 14, -5, 4)

# Rango extendido de 'x'
extendrange(x)
-5.95 14.95

En el ejemplo anterior, el rango se amplía 0.95 porque la diferencia entre el valor máximo y el mínimo es 19 y 19 x 0.05 = 0.95.

La fracción se puede personalizar con f, como se muestra a continuación.

# Vector numérico de muestra
x <- c(10, 1, 14, -5, 4)

# Rango extendido de 'x'
extendrange(x, f = 0.01)
-5.19 14.19

Además, se puede personalizar la extensión del rango para cada lado, pasando un vector con dos porcentajes, siendo el primero el utilizado en la izquierda y el segundo el utilizado en la derecha.

# Vector numérico de muestra
x <- c(10, 1, 14, -5, 4)

# Rango extendido de 'x'
extendrange(x, f = c(0.01, 0.05))
-5.19 14.95