programming - r studiodio
Dividir data.frame basado en niveles de un factor en nuevos data.frames (1)
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
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.