Dividir data.frame com base nos níveis de um fator em novos data.frames

Estou tentando criar objects data.frame separados data.frame base nos níveis de um fator. Então, se eu tiver:

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

Como posso dividir o df em dados separados.frame s para cada nível de g contendo os valores x e y correspondentes? Eu posso fazer a maior parte do caminho usando split(df, df$g) , mas eu gostaria que cada nível do fator tivesse seu próprio data.frame . Qual é a melhor forma de fazer isso?

Obrigado.

Eu acho que a split faz exatamente o que você quer.

Observe que X é uma lista de frameworks de dados, conforme visto por str :

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

Se você quiser um object individual com os nomes do grupo g, você poderia atribuir os elementos de X da split aos objects desses nomes, embora isso pareça ser um trabalho extra quando você pode apenas indexar os frameworks de dados da split da lista.

 #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 Ou melhor ainda do que usar lapply para atribuir ao ambiente global use list2env :

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