Dividir data.frame basado en niveles de un factor en nuevos data.frames

Estoy tratando de crear objetos de data.frame separados en función de los niveles de un factor. Entonces si tengo:

 df <- data.frame( x=rnorm(25), y=rnorm(25), g=rep(factor(LETTERS[1:5]), 5) ) 

¿Cómo puedo dividir df en data.frame s para cada nivel de g contiene los valores y correspondientes? Puedo hacer la mayor parte del camino utilizando split(df, df$g) , pero me gustaría que cada nivel del factor tenga su propio data.frame . ¿Cuál es la mejor manera de hacer esto?

Gracias.

Creo que esa split hace exactamente lo que quieres.

Observe que X es una lista de marcos de datos, como lo ve str :

 X <- split(df, df$g) str(X) 

Si desea un objeto individual con los nombres del grupo g, podría asignar los elementos de X de la split a los objetos de esos nombres, aunque esto parece un trabajo extra cuando puede simplemente indexar los marcos de datos de las creaciones de split listas.

 #I used lapply just to drop the third column g which is no longer needed. Y <- lapply(seq_along(X), function(x) as.data.frame(X[[x]])[, 1:2]) #Assign the dataframes in the list Y to individual objects A <- Y[[1]] B <- Y[[2]] C <- Y[[3]] D <- Y[[4]] E <- Y[[5]] #Or use lapply with assign to assign each piece to an object all at once lapply(seq_along(Y), function(x) { assign(c("A", "B", "C", "D", "E")[x], Y[[x]], envir=.GlobalEnv) } ) 

Editar O incluso mejor que usar lapply para asignar al entorno global use list2env :

 names(Y) <- c("A", "B", "C", "D", "E") list2env(Y, envir = .GlobalEnv) A