问题描述
我有一些要扩展的嵌套数据,我想扩展 MetaData
列。但是,使用以下内容:
x <- data %>%
unnest(MetaData,names_sep = "_") #names_repair = "unique")
扩展数据,但是当我运行 colnames(x)
时,我看不到扩展的列名称,我无法对数据进行任何进一步的更改。我的下一步是fill()
MetaData_Variable.Codigo
列,但我无法“访问”它。
数据:
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"),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"),"0811002001",structure(list(
Id = c(72L,382443L,328295L),Variable = structure(list(
Id = c(3L,482L,847L),"SALDOS CONTABLES","Secciones"),"","SECC")),"Renta bruta media por persona","Barcelona sección 04053"),"0801904053"
)),328519L,322964L),"distribución de la fuente de ingresos"
),"Barcelona sección 07032","Fuente de ingreso: prestaciones por desempleo"),"0801907032",structure(list(Id = c(72L,329470L,322966L),"Granollers sección 03002","Fuente de ingreso: otros ingresos"),"0809603002",329281L,"Cornellà de Llobregat sección 06002","0807306002",330493L,"Sabadell sección 03023","0818703023",331124L,"Santa Coloma de Gramenet sección 06010","0824506010",331290L,322962L),846L,"distritos","disT","Cercs distrito 01","Fuente de ingreso: salario"
),"0826801",327968L,322965L),"Barcelona sección 02018","Fuente de ingreso: otras prestaciones"),"0801902018",329895L,El distrito 02","Fuente de ingreso: prestaciones por desempleo"
),"0811802",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"),T3_Periodo = c("A","A","A"),Anyo = 2018:2015,Valor = c(2739,2624,2573,2675)),4L)),structure(list(
Fecha = c("2018-01-01T00:00:00.000+01:00","2015-01-01T00:00:00.000+01:00"
),Valor = c(31554,30316,29789,28079)),structure(list(Fecha = c("2018-01-01T00:00:00.000+01:00",Valor = c(264,228,307,338
)),Valor = c(922,878,861,931)),structure(list(Fecha = c("2017-01-01T00:00:00.000+01:00","2015-01-01T00:00:00.000+01:00"
),Anyo = 2017:2015,Valor = c(293,288,355)),Valor = c(951,246,225,287)),structure(list(
Fecha = c("2018-01-01T00:00:00.000+01:00","2015-01-01T00:00:00.000+01:00"
),Valor = c(280,303,366,399)),Valor = c(7960,7377,6874,6685)),Valor = c(700,586,579,563)),Valor = c(234,232,276,307)),4L)))),-10L))
解决方法
这能解决您的问题吗?
library(tidyr)
library(dplyr)
library(purrr)
y <- map_df(names(data),~ data %>%
select(.x) %>%
unnest_wider(.x,names_sep="_"))
输出:
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"
,
也许你可以使用这个?
library(dplyr)
library(tidyr)
x <- data %>% unnest(MetaData,names_sep = "_")
y <- bind_rows(x %>% select(-MetaData_Variable),x$MetaData_Variable)