Problema
Queremos dividir un data frame por una de las columnas, creando tantos data frames como grupos contiene la columna. Por ejemplo, dividiremos el data frame ChickWeight por la columna Chick que identifica 50 tipos de polluelos.
str(ChickWeight$Chick)
Ord.factor w/ 50 levels "18"<"16"<"15"<..: 15 15 15 15 15 15 15 15 15 15 ...
Solución
ldf <- split(ChickWeight, ChickWeight$Chick)
Para acceder a un data frame de la lista de 50, por ejemplo el 20:
ldf$`20`
weight Time Chick Diet
209 41 0 20 1
210 47 2 20 1
211 54 4 20 1
212 58 6 20 1
213 65 8 20 1
214 73 10 20 1
215 77 12 20 1
216 89 14 20 1
217 98 16 20 1
218 107 18 20 1
219 115 20 20 1
220 117 21 20 1
Sin embargo, para prescindir de los números como nombres de data frames, creamos una nueva columna en la que anteponemos a cada número la cadena de texto Chick_.
ChickWeight$id <- paste0("Chick_", ChickWeight$Chick)
# Creamos la lista de nuevo
ldf <- split(ChickWeight, ChickWeight$id)
# Accedemos a un data frame
ldf$Chick_20
Si queremos crear un objeto separado para cada data frame en nuestro entorno de trabajo.
list2env(ldf, .GlobalEnv)
En nuestro entorno habremos creado 50 data frames.
Referencias
No hay comentarios:
Publicar un comentario