vista ver tabla recuperar mapa herramientas fuente establecer diseƱo datos data crear contenido como barra arcmap r list dataframe nested type-conversion

tabla - ver mapa en arcmap



Convierte la lista de listas al marco de datos (3)

Podemos usar tidyverse con un código más compacto y legible

library(dplyr) library(tidyr) library(purrr) res1 <- mylist %>% #bind the inner datasets and create an id column map(bind_rows, .id = "id") %>% #bind the outer datasets and create an EXP column bind_rows(.id = "EXP") %>% #reshape to wide format spread(id, mean) head(res1, 4) # EXP year EM-V6 R0-R4 R4-R9 V6-R0 #1 exp1.1 2011 34 31 27 30 #2 exp1.1 2012 34 32 29 33 #3 exp1.1 2013 32 32 28 33 #4 exp1.1 2014 28 33 28 32

O podemos abordar esto haciendo un bucle a través de la lista mylist con lapply , luego crearemos una nueva columna ''nombre'', asignaremos el Map cbind los names de los elementos de la list interna, luego rbind los elementos de la list con do.call(rbind , ahora hagamos un segundo Map para crear una nueva columna basada en los names de ''mi lista'', rbind los elementos de la list y luego reshape desde la base R para convertirla en ''amplia''

res <- do.call(rbind, Map(cbind, lapply(mylist, function(x) do.call(rbind, Map(cbind, x, name = names(x)))), EXP= names(mylist))) res2 <- reshape(res, idvar = c("year", "EXP"), timevar = "name", direction = "wide") row.names(res2) <- NULL head(res2, 4) # year EXP mean.EM-V6 mean.V6-R0 mean.R0-R4 mean.R4-R9 #1 2011 exp1.1 34 30 31 27 #2 2012 exp1.1 34 33 32 29 #3 2013 exp1.1 32 33 32 28 #4 2014 exp1.1 28 32 33 28

NOTA: No se usaron paquetes externos (100% base R )

o use dcast de reshape2 para transformarlo a formato ''ancho''

library(reshape2) res2 <- dcast(res, year + EXP~name, value.var = "mean") head(res2, 4) # year EXP EM-V6 V6-R0 R0-R4 R4-R9 #1 2011 exp1.1 34 30 31 27 #2 2011 exp1.2 34 30 31 27 #3 2011 exp2.1 34 30 31 27 #4 2011 exp2.2 34 30 31 27

mylist una lista anidada, llamada mylist que tiene una longitud de 4.

Cada elemento de esta lista es un experimento: exp1.1 , exp1.2 , exp2.1 y exp2.2 .

Cada experimento contiene observaciones de la duración (en días) de cuatro etapas de crecimiento de la planta: EM-V6 V6-R0 R0-R4 y R4-R9 .

Cada etapa de crecimiento está organizada como un marco de datos con el year y la mean .

Aquí está la información completa:

mylist=structure(list(exp1.1 = structure(list(`EM-V6` = structure(list( year = 2011:2100, mean = c(34, 34, 32, 28, 25, 32, 32, 28, 27, 30, 32, 31, 33, 28, 26, 31, 33, 27, 34, 26, 28, 27, 27, 30, 29, 31, 34, 30, 26, 31, 33, 33, 27, 30, 28, 32, 31, 29, 32, 31, 25, 28, 28, 26, 32, 29, 26, 31, 28, 29, 30, 25, 27, 32, 27, 28, 28, 30, 24, 30, 29, 29, 29, 28, 26, 28, 26, 26, 28, 31, 30, 27, 26, 28, 25, 24, 24, 30, 27, 26, 26, 27, 26, 26, 24, 26, 28, 25, 30, 26)), .Names = c("year", "mean"), row.names = c(NA, -90L), class = "data.frame"), `V6-R0` = structure(list(year = 2011:2100, mean = c(30, 33, 33, 32, 29, 30, 32, 31, 32, 30, 33, 30, 32, 33, 33, 32, 29, 31, 32, 28, 31, 29, 36, 29, 30, 30, 33, 31, 33, 30, 34, 32, 29, 31, 28, 30, 30, 29, 34, 31, 32, 31, 30, 28, 32, 29, 29, 32, 29, 28, 29, 29, 32, 31, 27, 32, 29, 31, 29, 29, 30, 29, 29, 29, 28, 28, 30, 30, 30, 32, 29, 29, 30, 29, 29, 29, 28, 28, 29, 30, 29, 29, 29, 30, 28, 30, 30, 29, 29, 29)), .Names = c("year", "mean"), row.names = c(NA, -90L), class = "data.frame"), `R0-R4` = structure(list(year = 2011:2100, mean = c(31, 32, 32, 33, 32, 32, 33, 31, 34, 32, 33, 33, 32, 31, 33, 31, 32, 32, 32, 30, 32, 31, 34, 30, 31, 32, 34, 33, 34, 32, 36, 33, 32, 32, 31, 30, 32, 32, 32, 32, 32, 32, 31, 30, 30, 31, 32, 32, 30, 30, 32, 31, 31, 32, 30, 32, 29, 32, 31, 30, 32, 30, 30, 31, 32, 30, 31, 30, 31, 32, 31, 31, 30, 30, 30, 31, 30, 30, 31, 30, 31, 30, 30, 30, 31, 32, 30, 31, 30, 30)), .Names = c("year", "mean"), row.names = c(NA, -90L), class = "data.frame"), `R4-R9` = structure(list(year = 2011:2100, mean = c(27, 29, 28, 28, 27, 30, 29, 27, 30, 26, 30, 28, 29, 28, 29, 27, 29, 28, 25, 26, 26, 25, 27, 27, 27, 28, 30, 28, 29, 27, 29, 28, 29, 28, 26, 26, 28, 28, 30, 28, 27, 25, 26, 25, 25, 26, 26, 27, 25, 25, 26, 25, 27, 28, 24, 27, 25, 28, 26, 24, 27, 26, 27, 25, 26, 26, 24, 26, 25, 26, 24, 25, 25, 26, 26, 25, 25, 25, 25, 25, 26, 25, 25, 25, 25, 26, 26, 26, 25, 24)), .Names = c("year", "mean"), row.names = c(NA, -90L), class = "data.frame")), .Names = c("EM-V6", "V6-R0", "R0-R4", "R4-R9")), exp1.2 = structure(list(`EM-V6` = structure(list(year = 2011:2100, mean = c(34, 34, 32, 28, 25, 32, 32, 28, 27, 30, 32, 31, 33, 28, 26, 31, 33, 27, 34, 26, 28, 27, 27, 30, 29, 31, 34, 30, 26, 31, 33, 33, 27, 30, 28, 32, 31, 29, 32, 31, 25, 28, 28, 26, 32, 29, 26, 31, 28, 29, 30, 25, 27, 32, 27, 28, 28, 30, 24, 30, 29, 29, 29, 28, 26, 28, 26, 26, 28, 31, 30, 27, 26, 28, 25, 24, 24, 30, 27, 26, 26, 27, 26, 26, 24, 26, 28, 25, 30, 26)), .Names = c("year", "mean"), row.names = c(NA, -90L), class = "data.frame"), `V6-R0` = structure(list(year = 2011:2100, mean = c(30, 33, 33, 32, 29, 30, 32, 31, 32, 30, 33, 30, 32, 33, 33, 32, 29, 31, 32, 28, 31, 29, 36, 29, 30, 30, 33, 31, 33, 30, 34, 32, 29, 31, 28, 30, 30, 29, 34, 31, 32, 31, 30, 28, 32, 29, 29, 32, 29, 28, 29, 29, 32, 31, 27, 32, 29, 31, 29, 29, 30, 29, 29, 29, 28, 28, 30, 30, 30, 32, 29, 29, 30, 29, 29, 29, 28, 28, 29, 30, 29, 29, 29, 30, 28, 30, 30, 29, 29, 29)), .Names = c("year", "mean"), row.names = c(NA, -90L), class = "data.frame"), `R0-R4` = structure(list(year = 2011:2100, mean = c(31, 32, 32, 33, 32, 32, 33, 31, 34, 32, 33, 33, 32, 31, 33, 31, 32, 32, 32, 30, 32, 31, 34, 30, 31, 32, 34, 33, 34, 32, 36, 33, 32, 32, 31, 30, 32, 32, 32, 32, 32, 32, 31, 30, 30, 31, 32, 32, 30, 30, 32, 31, 31, 32, 30, 32, 29, 32, 31, 30, 32, 30, 30, 31, 32, 30, 31, 30, 31, 32, 31, 31, 30, 30, 30, 31, 30, 30, 31, 30, 31, 30, 30, 30, 31, 32, 30, 31, 30, 30)), .Names = c("year", "mean"), row.names = c(NA, -90L), class = "data.frame"), `R4-R9` = structure(list(year = 2011:2100, mean = c(27, 29, 28, 28, 27, 30, 29, 27, 30, 26, 30, 28, 29, 28, 29, 27, 29, 28, 25, 26, 26, 25, 27, 27, 27, 28, 30, 28, 29, 27, 29, 28, 29, 28, 26, 26, 28, 28, 30, 28, 27, 25, 26, 25, 25, 26, 26, 27, 25, 25, 26, 25, 27, 28, 24, 27, 25, 28, 26, 24, 27, 26, 27, 25, 26, 26, 24, 26, 25, 26, 24, 25, 25, 26, 26, 25, 25, 25, 25, 25, 26, 25, 25, 25, 25, 26, 26, 26, 25, 24)), .Names = c("year", "mean"), row.names = c(NA, -90L), class = "data.frame")), .Names = c("EM-V6", "V6-R0", "R0-R4", "R4-R9")), exp2.1 = structure(list(`EM-V6` = structure(list(year = 2011:2100, mean = c(34, 34, 32, 28, 25, 32, 32, 28, 27, 30, 32, 31, 33, 28, 26, 31, 33, 27, 34, 26, 28, 27, 27, 30, 29, 31, 34, 30, 26, 31, 33, 33, 27, 30, 28, 32, 31, 29, 32, 31, 25, 28, 28, 26, 32, 29, 26, 31, 28, 29, 30, 25, 27, 32, 27, 28, 28, 30, 24, 30, 29, 29, 29, 28, 26, 28, 26, 26, 28, 31, 30, 27, 26, 28, 25, 24, 24, 30, 27, 26, 26, 27, 26, 26, 24, 26, 28, 25, 30, 26)), .Names = c("year", "mean"), row.names = c(NA, -90L), class = "data.frame"), `V6-R0` = structure(list(year = 2011:2100, mean = c(30, 33, 33, 32, 29, 30, 32, 31, 32, 30, 33, 30, 32, 33, 33, 32, 29, 31, 32, 28, 31, 29, 36, 29, 30, 30, 33, 31, 33, 30, 34, 32, 29, 31, 28, 30, 30, 29, 34, 31, 32, 31, 30, 28, 32, 29, 29, 32, 29, 28, 29, 29, 32, 31, 27, 32, 29, 31, 29, 29, 30, 29, 29, 29, 28, 28, 30, 30, 30, 32, 29, 29, 30, 29, 29, 29, 28, 28, 29, 30, 29, 29, 29, 30, 28, 30, 30, 29, 29, 29)), .Names = c("year", "mean"), row.names = c(NA, -90L), class = "data.frame"), `R0-R4` = structure(list(year = 2011:2100, mean = c(31, 32, 32, 33, 32, 32, 33, 31, 34, 32, 33, 33, 32, 31, 33, 31, 32, 32, 32, 30, 32, 31, 34, 30, 31, 32, 34, 33, 34, 32, 36, 33, 32, 32, 31, 30, 32, 32, 32, 32, 32, 32, 31, 30, 30, 31, 32, 32, 30, 30, 32, 31, 31, 32, 30, 32, 29, 32, 31, 30, 32, 30, 30, 31, 32, 30, 31, 30, 31, 32, 31, 31, 30, 30, 30, 31, 30, 30, 31, 30, 31, 30, 30, 30, 31, 32, 30, 31, 30, 30)), .Names = c("year", "mean"), row.names = c(NA, -90L), class = "data.frame"), `R4-R9` = structure(list(year = 2011:2100, mean = c(27, 29, 28, 28, 27, 30, 29, 27, 30, 26, 30, 28, 29, 28, 29, 27, 29, 28, 25, 26, 26, 25, 27, 27, 27, 28, 30, 28, 29, 27, 29, 28, 29, 28, 26, 26, 28, 28, 30, 28, 27, 25, 26, 25, 25, 26, 26, 27, 25, 25, 26, 25, 27, 28, 24, 27, 25, 28, 26, 24, 27, 26, 27, 25, 26, 26, 24, 26, 25, 26, 24, 25, 25, 26, 26, 25, 25, 25, 25, 25, 26, 25, 25, 25, 25, 26, 26, 26, 25, 24)), .Names = c("year", "mean"), row.names = c(NA, -90L), class = "data.frame")), .Names = c("EM-V6", "V6-R0", "R0-R4", "R4-R9")), exp2.2 = structure(list(`EM-V6` = structure(list(year = 2011:2100, mean = c(34, 34, 32, 28, 25, 32, 32, 28, 27, 30, 32, 31, 33, 28, 26, 31, 33, 27, 34, 26, 28, 27, 27, 30, 29, 31, 34, 30, 26, 31, 33, 33, 27, 30, 28, 32, 31, 29, 32, 31, 25, 28, 28, 26, 32, 29, 26, 31, 28, 29, 30, 25, 27, 32, 27, 28, 28, 30, 24, 30, 29, 29, 29, 28, 26, 28, 26, 26, 28, 31, 30, 27, 26, 28, 25, 24, 24, 30, 27, 26, 26, 27, 26, 26, 24, 26, 28, 25, 30, 26)), .Names = c("year", "mean"), row.names = c(NA, -90L), class = "data.frame"), `V6-R0` = structure(list(year = 2011:2100, mean = c(30, 33, 33, 32, 29, 30, 32, 31, 32, 30, 33, 30, 32, 33, 33, 32, 29, 31, 32, 28, 31, 29, 36, 29, 30, 30, 33, 31, 33, 30, 34, 32, 29, 31, 28, 30, 30, 29, 34, 31, 32, 31, 30, 28, 32, 29, 29, 32, 29, 28, 29, 29, 32, 31, 27, 32, 29, 31, 29, 29, 30, 29, 29, 29, 28, 28, 30, 30, 30, 32, 29, 29, 30, 29, 29, 29, 28, 28, 29, 30, 29, 29, 29, 30, 28, 30, 30, 29, 29, 29)), .Names = c("year", "mean"), row.names = c(NA, -90L), class = "data.frame"), `R0-R4` = structure(list(year = 2011:2100, mean = c(31, 32, 32, 33, 32, 32, 33, 31, 34, 32, 33, 33, 32, 31, 33, 31, 32, 32, 32, 30, 32, 31, 34, 30, 31, 32, 34, 33, 34, 32, 36, 33, 32, 32, 31, 30, 32, 32, 32, 32, 32, 32, 31, 30, 30, 31, 32, 32, 30, 30, 32, 31, 31, 32, 30, 32, 29, 32, 31, 30, 32, 30, 30, 31, 32, 30, 31, 30, 31, 32, 31, 31, 30, 30, 30, 31, 30, 30, 31, 30, 31, 30, 30, 30, 31, 32, 30, 31, 30, 30)), .Names = c("year", "mean"), row.names = c(NA, -90L), class = "data.frame"), `R4-R9` = structure(list(year = 2011:2100, mean = c(27, 29, 28, 28, 27, 30, 29, 27, 30, 26, 30, 28, 29, 28, 29, 27, 29, 28, 25, 26, 26, 25, 27, 27, 27, 28, 30, 28, 29, 27, 29, 28, 29, 28, 26, 26, 28, 28, 30, 28, 27, 25, 26, 25, 25, 26, 26, 27, 25, 25, 26, 25, 27, 28, 24, 27, 25, 28, 26, 24, 27, 26, 27, 25, 26, 26, 24, 26, 25, 26, 24, 25, 25, 26, 26, 25, 25, 25, 25, 25, 26, 25, 25, 25, 25, 26, 26, 26, 25, 24)), .Names = c("year", "mean"), row.names = c(NA, -90L), class = "data.frame")), .Names = c("EM-V6", "V6-R0", "R0-R4", "R4-R9"))), .Names = c("exp1.1", "exp1.2", "exp2.1", "exp2.2" ))

Lo que tengo que hacer es "deslistar" esta lista anidada en un marco de datos que se verá así:

YEAR EXP EM-V6 V6-R0 R0-R4 R4-R9 2011 exp1.1 34 30 31 27 2011 exp1.2 34 30 31 27 2011 exp2.1 34 30 31 27 2011 exp1.1 34 30 31 27

Lo que significa:

- first year, first experiment, and growth stages. - first year, second experiment and growth stages. - first year, third experiment and growth stages - first year, fourth experiment and growth stages - second year, first experiment and growth stages

y así.

¿Cómo realizar esa transformación de datos?


Tidyverse alternativo:

library(tidyverse) map_df(mylist, ~bind_rows(., .id="id"), .id="EXP") %>% spread(id, mean)


Una alternativa que usa rbindlist del data.table dos veces:

library(data.table) # bind the dataframes in the ''listed lists'' together and include the year with the ''id''-parameter # the resulting ''data.table''s are returned as a list step1 <- lapply(mylist, rbindlist, id = ''stages'') # bind the resulting list together and include the experiment id step2 <- rbindlist(step1, id = ''experiment'') # reshape to wide format dcast(step2, year + experiment ~ stages, value.var = ''mean'')

O de una vez:

dcast(rbindlist(lapply(mylist, rbindlist, id = ''stages''), id = ''experiment''), year + experiment ~ stages, value.var = ''mean'')

lo que da:

year experiment EM-V6 R0-R4 R4-R9 V6-R0 1: 2011 exp1.1 34 31 27 30 2: 2011 exp1.2 34 31 27 30 3: 2011 exp2.1 34 31 27 30 4: 2011 exp2.2 34 31 27 30 5: 2012 exp1.1 34 32 29 33 --- 356: 2099 exp2.2 30 30 25 29 357: 2100 exp1.1 26 30 24 29 358: 2100 exp1.2 26 30 24 29 359: 2100 exp2.1 26 30 24 29 360: 2100 exp2.2 26 30 24 29