取消嵌套列并填充数据 - 找不到未嵌套的列

问题描述

我有一些要扩展的嵌套数据,我想扩展 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)