2015-11-25

Dividir un data frame en los grupos definidos por una columna en R

Title

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

  • Crear una lista de data frames.
  • 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
    
  • Crear data frames independientes
  • 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

    Nube de datos