varias superponer presentacion nuevo mapas herramientas graficos graficas definicion data crear como barra r split dataframe r-faq

presentacion - superponer graficas en r



¿Cómo dividir un marco de datos? (8)

Acabo de publicar un tipo de RFC que podría ayudarte: dividir un vector en fragmentos en R

x = data.frame(num = 1:26, let = letters, LET = LETTERS) ## number of chunks n <- 2 dfchunk <- split(x, factor(sort(rank(row.names(x))%%n))) dfchunk $`0` num let LET 1 1 a A 2 2 b B 3 3 c C 4 4 d D 5 5 e E 6 6 f F 7 7 g G 8 8 h H 9 9 i I 10 10 j J 11 11 k K 12 12 l L 13 13 m M $`1` num let LET 14 14 n N 15 15 o O 16 16 p P 17 17 q Q 18 18 r R 19 19 s S 20 20 t T 21 21 u U 22 22 v V 23 23 w W 24 24 x X 25 25 y Y 26 26 z Z

Saludos, Sebastian

Quiero dividir un marco de datos en varios más pequeños. Esto parece una pregunta muy trivial, sin embargo, no puedo encontrar una solución desde la búsqueda web.


Dividir el marco de datos parece contraproducente. En su lugar, utilice el paradigma de dividir-aplicar-combinar, por ejemplo, generar algunos datos

df = data.frame(grp=sample(letters, 100, TRUE), x=rnorm(100))

luego divide solo las columnas relevantes y aplica la función scale() a x en cada grupo, y combina los resultados (usando split<- o ave )

df$z = 0 split(df$z, df$grp) = lapply(split(df$x, df$grp), scale) ## alternative: df$z = ave(df$x, df$grp, FUN=scale)

Esto será muy rápido en comparación con la división de data.frames, y el resultado permanece utilizable en el análisis posterior sin iteración. Creo que la sintaxis de Dplyr es

library(dplyr) df %>% group_by(grp) %>% mutate(z=scale(x))

En general, esta solución dplyr es más rápida que la división de marcos de datos, pero no tan rápido como split-apply-combine.


La respuesta que desee depende en gran medida de cómo y por qué desea dividir el marco de datos.

Por ejemplo, si quiere omitir algunas variables, puede crear nuevos marcos de datos a partir de columnas específicas de la base de datos. Los subíndices entre paréntesis después del marco de datos se refieren a los números de filas y columnas. Echa un vistazo a Spoetry para una descripción completa.

newdf <- mydf[,1:3]

O bien, puede elegir filas específicas.

newdf <- mydf[1:3,]

Y estos subíndices también pueden ser pruebas lógicas, como elegir filas que contengan un valor particular o factores con un valor deseado.

¿Qué quieres hacer con los trozos sobrantes? ¿Necesita realizar la misma operación en cada porción de la base de datos? Luego, querrá asegurarse de que los subconjuntos del marco de datos terminen en un objeto conveniente, como una lista, que lo ayudará a realizar el mismo comando en cada fragmento del marco de datos.


Si desea dividir por valores en una de las columnas, puede usar lapply . Por ejemplo, dividir ChickWeight en un conjunto de datos separado para cada chica:

data(ChickWeight) lapply(unique(ChickWeight$Chick), function(x) ChickWeight[ChickWeight$Chick == x,])


Si desea dividir un marco de datos de acuerdo con los valores de alguna variable, le sugiero que use daply() del paquete plyr .

library(plyr) x <- daply(df, .(splitting_variable), function(x)return(x))

Ahora, x es una matriz de marcos de datos. Para acceder a uno de los marcos de datos, puede indexarlo con el nombre del nivel de la variable de división.

x$Level1 #or x[["Level1"]]

Sin embargo, me aseguraré de que no hay otras maneras más inteligentes de manejar tus datos antes de dividirlos en muchos marcos de datos.


También es posible que desee cortar el marco de datos en un número arbitrario de marcos de datos más pequeños. Aquí, cortamos en dos marcos de datos.

x = data.frame(num = 1:26, let = letters, LET = LETTERS) set.seed(10) split(x, sample(rep(1:2, 13)))

da

$`1` num let LET 3 3 c C 6 6 f F 10 10 j J 12 12 l L 14 14 n N 15 15 o O 17 17 q Q 18 18 r R 20 20 t T 21 21 u U 22 22 v V 23 23 w W 26 26 z Z $`2` num let LET 1 1 a A 2 2 b B 4 4 d D 5 5 e E 7 7 g G 8 8 h H 9 9 i I 11 11 k K 13 13 m M 16 16 p P 19 19 s S 24 24 x X 25 25 y Y


También podrías usar

data2 <- data[data$sum_points == 2500, ]

Esto hará que un marco de datos con los valores donde sum_points = 2500

Da :

airfoils sum_points field_points init_t contour_t field_t ... 491 5 2500 5625 0.000086 0.004272 6.321774 498 5 2500 5625 0.000087 0.004507 6.325083 504 5 2500 5625 0.000088 0.004370 6.336034 603 5 250 10000 0.000072 0.000525 1.111278 577 5 250 10000 0.000104 0.000559 1.111431 587 5 250 10000 0.000072 0.000528 1.111524 606 5 250 10000 0.000079 0.000538 1.111685 .... > data2 <- data[data$sum_points == 2500, ] > data2 airfoils sum_points field_points init_t contour_t field_t 108 5 2500 625 0.000082 0.004329 0.733109 106 5 2500 625 0.000102 0.004564 0.733243 117 5 2500 625 0.000087 0.004321 0.733274 112 5 2500 625 0.000081 0.004428 0.733587