Supongamos que tenemos un conjunto de datos en R, y una de las columnas se corresponde con una variable categórica o factorial. En esta entrada os mostraré cómo filtrar todos los factores de una variable categórica en un dataframe de R.
Quiero leer...
Datos de ejemplo iris
Empleamos los datos de ejemplo iris
, que se encuentra dentro del paquete datasets
.
data(iris) # cargamos los datos str(iris) # vemos su estructura
'data.frame': 150 obs. of 5 variables: $ Sepal.Length: num 5.1 4.9 4.7 4.6 5 5.4 4.6 5 4.4 4.9 ... $ Sepal.Width : num 3.5 3 3.2 3.1 3.6 3.9 3.4 3.4 2.9 3.1 ... $ Petal.Length: num 1.4 1.4 1.3 1.5 1.4 1.7 1.4 1.5 1.4 1.5 ... $ Petal.Width : num 0.2 0.2 0.2 0.2 0.2 0.4 0.3 0.2 0.2 0.1 ... $ Species : Factor w/ 3 levels "setosa","versicolor",..: 1 1 1 1 1 1 1 1 1 1 ...
head(iris) # vemos las primeras seis filas
Sepal.Length Sepal.Width Petal.Length Petal.Width Species 1 5.1 3.5 1.4 0.2 setosa 2 4.9 3.0 1.4 0.2 setosa 3 4.7 3.2 1.3 0.2 setosa 4 4.6 3.1 1.5 0.2 setosa 5 5.0 3.6 1.4 0.2 setosa 6 5.4 3.9 1.7 0.4 setosa
Como podemos ver, la columna Species
está compuesta por 3 factores: virginica
, setosa
y versicolor
.
Filtrar todos los factores de una variable categórica en un dataframe con split()
Vamos a dividir el conjunto de datos en tantos dataframes como especies haya, cada uno con una espcie en concreto. Para ello empleamos la función split()
, localizado en el paquete base
. Esta función es esencial para filtrar todos los factores de una variable categórica en un dataframe.
especies <- split(iris, iris$Species)
Como hemos visto, split()
tiene básicamente 2 argumentos principales:
iris
: el nombre del conjunto de datos a filtrar o subseleccionar.iris$Species
: la columna con la variable factorial.
Si vemos la estructura ahora del objeto especies
creado
con los diferentes factores, vemos que se ha creado una lista compuesta
con 3 dataframes, cada uno correspondiente a una especie diferente.
class(especies) # vemos la clase de objeto
[1] "list"
str(especies) # vemos la estructura
List of 3 $ setosa :'data.frame': 50 obs. of 5 variables: ..$ Sepal.Length: num [1:50] 5.1 4.9 4.7 4.6 5 5.4 4.6 5 4.4 4.9 ... ..$ Sepal.Width : num [1:50] 3.5 3 3.2 3.1 3.6 3.9 3.4 3.4 2.9 3.1 ... ..$ Petal.Length: num [1:50] 1.4 1.4 1.3 1.5 1.4 1.7 1.4 1.5 1.4 1.5 ... ..$ Petal.Width : num [1:50] 0.2 0.2 0.2 0.2 0.2 0.4 0.3 0.2 0.2 0.1 ... ..$ Species : Factor w/ 3 levels "setosa","versicolor",..: 1 1 1 1 1 1 1 1 1 1 ... $ versicolor:'data.frame': 50 obs. of 5 variables: ..$ Sepal.Length: num [1:50] 7 6.4 6.9 5.5 6.5 5.7 6.3 4.9 6.6 5.2 ... ..$ Sepal.Width : num [1:50] 3.2 3.2 3.1 2.3 2.8 2.8 3.3 2.4 2.9 2.7 ... ..$ Petal.Length: num [1:50] 4.7 4.5 4.9 4 4.6 4.5 4.7 3.3 4.6 3.9 ... ..$ Petal.Width : num [1:50] 1.4 1.5 1.5 1.3 1.5 1.3 1.6 1 1.3 1.4 ... ..$ Species : Factor w/ 3 levels "setosa","versicolor",..: 2 2 2 2 2 2 2 2 2 2 ... $ virginica :'data.frame': 50 obs. of 5 variables: ..$ Sepal.Length: num [1:50] 6.3 5.8 7.1 6.3 6.5 7.6 4.9 7.3 6.7 7.2 ... ..$ Sepal.Width : num [1:50] 3.3 2.7 3 2.9 3 3 2.5 2.9 2.5 3.6 ... ..$ Petal.Length: num [1:50] 6 5.1 5.9 5.6 5.8 6.6 4.5 6.3 5.8 6.1 ... ..$ Petal.Width : num [1:50] 2.5 1.9 2.1 1.8 2.2 2.1 1.7 1.8 1.8 2.5 ... ..$ Species : Factor w/ 3 levels "setosa","versicolor",..: 3 3 3 3 3 3 3 3 3 3 ...
Añadir los dataframes a nuestro ambiente de trabajo
Anteriormente vimos cómo crear una lista con tantos dataframes como tantos factores hubieran en la columna con la variable categórica en cuestión. Este es el modo de proceder estándar.
Pero podríamos estar interesados en poder extraer los dataframes de un modo independientes y añadirlos a nuestro ambiente de trabajo.
Esto lo podemos hacer con la función list2env()
.
list2env(especies, .GlobalEnv)
<environment: R_GlobalEnv>
Esta función tiene dos argumentos principales:
especies
: añadimos la lista con los diferentes dataframes..GlobalEnv
: indicamos dónde se van a almacenar los dataframes. En este caso será nuestro ambiente de trabajo.
1 comentario en «Filtrar todos los factores de una variable categórica en un dataframe de R»