Reputation: 7127
I have some nested data that I am trying to expand, I would like to expand the MetaData
column. However, using the following:
x <- data %>%
unnest(MetaData, names_sep = "_") #names_repair = "unique")
Expands the data but when I run colnames(x)
I don't see the expanded column names and I cannot do any futher mutations to the data. The next step for me would be to fill()
the MetaData_Variable.Codigo
column but I can't "access" it.
Data:
data <- structure(list(COD = c("ADRH144436", "ADRH9438995", "ADRH111995",
"ADRH160878", "ADRH161615", "ADRH115768", "ADRH159895", "ADRH281307",
"ADRH130524", "ADRH309865"), Nombre = c("Malgrat de Mar sección 02001. Dato base. Fuente de ingreso: pensiones. ",
"Barcelona sección 04053. Dato base. Renta bruta media por persona. ",
"Barcelona sección 07032. Dato base. Fuente de ingreso: prestaciones por desempleo. ",
"Granollers sección 03002. Dato base. Fuente de ingreso: otros ingresos. ",
"Cornellà de Llobregat sección 06002. Dato base. Fuente de ingreso: prestaciones por desempleo. ",
"Sabadell sección 03023. Dato base. Fuente de ingreso: otros ingresos. ",
"Santa Coloma de Gramenet sección 06010. Dato base. Fuente de ingreso: prestaciones por desempleo. ",
"Cercs distrito 01. Dato base. Fuente de ingreso: salario. ",
"Barcelona sección 02018. Dato base. Fuente de ingreso: otras prestaciones. ",
"Masnou, El distrito 02. Dato base. Fuente de ingreso: prestaciones por desempleo. "
), T3_Unidad = c("Euros", "Euros", "Euros", "Euros", "Euros",
"Euros", "Euros", "Euros", "Euros", "Euros"), T3_Escala = c(" ",
" ", " ", " ", " ", " ", " ", " ", " ", " "), MetaData = list(
structure(list(Id = c(72L, 329776L, 322963L), Variable = structure(list(
Id = c(3L, 847L, 849L), Nombre = c("Tipo de dato", "Secciones",
"Distribución de la fuente de ingresos"), Codigo = c("",
"SECC", "")), class = "data.frame", row.names = c(NA,
3L)), Nombre = c("Dato base", "Malgrat de Mar sección 02001",
"Fuente de ingreso: pensiones"), Codigo = c("", "0811002001",
"")), class = "data.frame", row.names = c(NA, 3L)), structure(list(
Id = c(72L, 382443L, 328295L), Variable = structure(list(
Id = c(3L, 482L, 847L), Nombre = c("Tipo de dato",
"SALDOS CONTABLES", "Secciones"), Codigo = c("",
"", "SECC")), class = "data.frame", row.names = c(NA,
3L)), Nombre = c("Dato base", "Renta bruta media por persona",
"Barcelona sección 04053"), Codigo = c("", "", "0801904053"
)), class = "data.frame", row.names = c(NA, 3L)), structure(list(
Id = c(72L, 328519L, 322964L), Variable = structure(list(
Id = c(3L, 847L, 849L), Nombre = c("Tipo de dato",
"Secciones", "Distribución de la fuente de ingresos"
), Codigo = c("", "SECC", "")), class = "data.frame", row.names = c(NA,
3L)), Nombre = c("Dato base", "Barcelona sección 07032",
"Fuente de ingreso: prestaciones por desempleo"), Codigo = c("",
"0801907032", "")), class = "data.frame", row.names = c(NA,
3L)), structure(list(Id = c(72L, 329470L, 322966L), Variable = structure(list(
Id = c(3L, 847L, 849L), Nombre = c("Tipo de dato", "Secciones",
"Distribución de la fuente de ingresos"), Codigo = c("",
"SECC", "")), class = "data.frame", row.names = c(NA,
3L)), Nombre = c("Dato base", "Granollers sección 03002",
"Fuente de ingreso: otros ingresos"), Codigo = c("", "0809603002",
"")), class = "data.frame", row.names = c(NA, 3L)), structure(list(
Id = c(72L, 329281L, 322964L), Variable = structure(list(
Id = c(3L, 847L, 849L), Nombre = c("Tipo de dato",
"Secciones", "Distribución de la fuente de ingresos"
), Codigo = c("", "SECC", "")), class = "data.frame", row.names = c(NA,
3L)), Nombre = c("Dato base", "Cornellà de Llobregat sección 06002",
"Fuente de ingreso: prestaciones por desempleo"), Codigo = c("",
"0807306002", "")), class = "data.frame", row.names = c(NA,
3L)), structure(list(Id = c(72L, 330493L, 322966L), Variable = structure(list(
Id = c(3L, 847L, 849L), Nombre = c("Tipo de dato", "Secciones",
"Distribución de la fuente de ingresos"), Codigo = c("",
"SECC", "")), class = "data.frame", row.names = c(NA,
3L)), Nombre = c("Dato base", "Sabadell sección 03023",
"Fuente de ingreso: otros ingresos"), Codigo = c("", "0818703023",
"")), class = "data.frame", row.names = c(NA, 3L)), structure(list(
Id = c(72L, 331124L, 322964L), Variable = structure(list(
Id = c(3L, 847L, 849L), Nombre = c("Tipo de dato",
"Secciones", "Distribución de la fuente de ingresos"
), Codigo = c("", "SECC", "")), class = "data.frame", row.names = c(NA,
3L)), Nombre = c("Dato base", "Santa Coloma de Gramenet sección 06010",
"Fuente de ingreso: prestaciones por desempleo"), Codigo = c("",
"0824506010", "")), class = "data.frame", row.names = c(NA,
3L)), structure(list(Id = c(72L, 331290L, 322962L), Variable = structure(list(
Id = c(3L, 846L, 849L), Nombre = c("Tipo de dato", "Distritos",
"Distribución de la fuente de ingresos"), Codigo = c("",
"DIST", "")), class = "data.frame", row.names = c(NA,
3L)), Nombre = c("Dato base", "Cercs distrito 01", "Fuente de ingreso: salario"
), Codigo = c("", "0826801", "")), class = "data.frame", row.names = c(NA,
3L)), structure(list(Id = c(72L, 327968L, 322965L), Variable = structure(list(
Id = c(3L, 847L, 849L), Nombre = c("Tipo de dato", "Secciones",
"Distribución de la fuente de ingresos"), Codigo = c("",
"SECC", "")), class = "data.frame", row.names = c(NA,
3L)), Nombre = c("Dato base", "Barcelona sección 02018",
"Fuente de ingreso: otras prestaciones"), Codigo = c("",
"0801902018", "")), class = "data.frame", row.names = c(NA,
3L)), structure(list(Id = c(72L, 329895L, 322964L), Variable = structure(list(
Id = c(3L, 846L, 849L), Nombre = c("Tipo de dato", "Distritos",
"Distribución de la fuente de ingresos"), Codigo = c("",
"DIST", "")), class = "data.frame", row.names = c(NA,
3L)), Nombre = c("Dato base", "Masnou, El distrito 02", "Fuente de ingreso: prestaciones por desempleo"
), Codigo = c("", "0811802", "")), class = "data.frame", row.names = c(NA,
3L))), Data = list(structure(list(Fecha = c("2018-01-01T00:00:00.000+01:00",
"2017-01-01T00:00:00.000+01:00", "2016-01-01T00:00:00.000+01:00",
"2015-01-01T00:00:00.000+01:00"), T3_TipoDato = c("Definitivo",
"Definitivo", "Definitivo", "Definitivo"), T3_Periodo = c("A",
"A", "A", "A"), Anyo = 2018:2015, Valor = c(2739, 2624, 2573,
2675)), class = "data.frame", row.names = c(NA, 4L)), structure(list(
Fecha = c("2018-01-01T00:00:00.000+01:00", "2017-01-01T00:00:00.000+01:00",
"2016-01-01T00:00:00.000+01:00", "2015-01-01T00:00:00.000+01:00"
), T3_TipoDato = c("Definitivo", "Definitivo", "Definitivo",
"Definitivo"), T3_Periodo = c("A", "A", "A", "A"), Anyo = 2018:2015,
Valor = c(31554, 30316, 29789, 28079)), class = "data.frame", row.names = c(NA,
4L)), structure(list(Fecha = c("2018-01-01T00:00:00.000+01:00",
"2017-01-01T00:00:00.000+01:00", "2016-01-01T00:00:00.000+01:00",
"2015-01-01T00:00:00.000+01:00"), T3_TipoDato = c("Definitivo",
"Definitivo", "Definitivo", "Definitivo"), T3_Periodo = c("A",
"A", "A", "A"), Anyo = 2018:2015, Valor = c(264, 228, 307, 338
)), class = "data.frame", row.names = c(NA, 4L)), structure(list(
Fecha = c("2018-01-01T00:00:00.000+01:00", "2017-01-01T00:00:00.000+01:00",
"2016-01-01T00:00:00.000+01:00", "2015-01-01T00:00:00.000+01:00"
), T3_TipoDato = c("Definitivo", "Definitivo", "Definitivo",
"Definitivo"), T3_Periodo = c("A", "A", "A", "A"), Anyo = 2018:2015,
Valor = c(922, 878, 861, 931)), class = "data.frame", row.names = c(NA,
4L)), structure(list(Fecha = c("2017-01-01T00:00:00.000+01:00",
"2016-01-01T00:00:00.000+01:00", "2015-01-01T00:00:00.000+01:00"
), T3_TipoDato = c("Definitivo", "Definitivo", "Definitivo"),
T3_Periodo = c("A", "A", "A"), Anyo = 2017:2015, Valor = c(293,
288, 355)), class = "data.frame", row.names = c(NA, 3L)),
structure(list(Fecha = c("2018-01-01T00:00:00.000+01:00",
"2017-01-01T00:00:00.000+01:00", "2016-01-01T00:00:00.000+01:00",
"2015-01-01T00:00:00.000+01:00"), T3_TipoDato = c("Definitivo",
"Definitivo", "Definitivo", "Definitivo"), T3_Periodo = c("A",
"A", "A", "A"), Anyo = 2018:2015, Valor = c(951, 246, 225,
287)), class = "data.frame", row.names = c(NA, 4L)), structure(list(
Fecha = c("2018-01-01T00:00:00.000+01:00", "2017-01-01T00:00:00.000+01:00",
"2016-01-01T00:00:00.000+01:00", "2015-01-01T00:00:00.000+01:00"
), T3_TipoDato = c("Definitivo", "Definitivo", "Definitivo",
"Definitivo"), T3_Periodo = c("A", "A", "A", "A"), Anyo = 2018:2015,
Valor = c(280, 303, 366, 399)), class = "data.frame", row.names = c(NA,
4L)), structure(list(Fecha = c("2018-01-01T00:00:00.000+01:00",
"2017-01-01T00:00:00.000+01:00", "2016-01-01T00:00:00.000+01:00",
"2015-01-01T00:00:00.000+01:00"), T3_TipoDato = c("Definitivo",
"Definitivo", "Definitivo", "Definitivo"), T3_Periodo = c("A",
"A", "A", "A"), Anyo = 2018:2015, Valor = c(7960, 7377, 6874,
6685)), class = "data.frame", row.names = c(NA, 4L)), structure(list(
Fecha = c("2018-01-01T00:00:00.000+01:00", "2017-01-01T00:00:00.000+01:00",
"2016-01-01T00:00:00.000+01:00", "2015-01-01T00:00:00.000+01:00"
), T3_TipoDato = c("Definitivo", "Definitivo", "Definitivo",
"Definitivo"), T3_Periodo = c("A", "A", "A", "A"), Anyo = 2018:2015,
Valor = c(700, 586, 579, 563)), class = "data.frame", row.names = c(NA,
4L)), structure(list(Fecha = c("2018-01-01T00:00:00.000+01:00",
"2017-01-01T00:00:00.000+01:00", "2016-01-01T00:00:00.000+01:00",
"2015-01-01T00:00:00.000+01:00"), T3_TipoDato = c("Definitivo",
"Definitivo", "Definitivo", "Definitivo"), T3_Periodo = c("A",
"A", "A", "A"), Anyo = 2018:2015, Valor = c(234, 232, 276,
307)), class = "data.frame", row.names = c(NA, 4L)))), class = "data.frame", row.names = c(NA,
-10L))
Upvotes: 0
Views: 65
Reputation: 79144
Does this solve your problem?
library(tidyr)
library(dplyr)
library(purrr)
y <- map_df(names(data), ~ data %>%
select(.x) %>%
unnest_wider(.x,names_sep="_"))
Output:
colnames(y)
[1] "COD_1" "Nombre_1" "T3_Unidad_1" "T3_Escala_1" "MetaData_Id"
[6] "MetaData_Variable" "MetaData_Nombre" "MetaData_Codigo" "Data_Fecha" "Data_T3_TipoDato"
[11] "Data_T3_Periodo" "Data_Anyo" "Data_Valor"
Upvotes: 4
Reputation: 389135
Maybe you can use this ?
library(dplyr)
library(tidyr)
x <- data %>% unnest(MetaData, names_sep = "_")
y <- bind_rows(x %>% select(-MetaData_Variable), x$MetaData_Variable)
Upvotes: 2