Rango en R con la función range()
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