Ich habe einen Datenrahmen mit einigen verschachtelten Daten und möchte die Daten verflachen und bestimmte Zellen aus den verschachtelten Daten extrahieren.
Die verschachtelten Daten befinden sich in der Spalte, MetaData
die wie folgt aussieht:
[[1]]
Id Variable.Id Variable.Nombre Variable.Codigo Nombre Codigo
1 72 3 Tipo de dato Dato base
2 5457 19 Municipios MUN Abrera 08001
3 274520 260 Conceptos Demográficos Edad media de la población
[[2]]
Id Variable.Id Variable.Nombre Variable.Codigo Nombre Codigo
1 72 3 Tipo de dato Dato base
2 366833 260 Conceptos Demográficos Porcentaje de hogares unipersonales
3 327739 846 Distritos DIST Badalona distrito 02 0801502
[[3]]
Id Variable.Id Variable.Nombre Variable.Codigo Nombre Codigo
1 72 3 Tipo de dato Dato base
2 366833 260 Conceptos Demográficos Porcentaje de hogares unipersonales
3 331103 847 Secciones SECC Santa Coloma de Gramenet sección 05009 0824505009
Ich möchte extrahieren -
Von [[1]]
den municipios
, MUN
, Abrera
und08001
Von [[2]]
den Distritos
, DIST
, Badalona distrito 02
und0801502
Von [[3]]
dem Secciones
, SECC
, Santa Columa de Gramenet sección 05009
und 0824505009
.
Die einfache Verwendung des Zellenstandorts funktioniert jedoch nicht, da sich der Standort für die MUN
Daten für die DIST
und SECC
-Daten an einem etwas anderen Standort befindet - dh für MUN
unter der Spalte Nombre
und Codigo
der Zellenstandort in Zeile 2, während der Zellenstandort für die DIST
und SECC
-Daten ist in Reihe 3.
Ich habe den folgenden Code, der die Daten für das MUN
problemlos extrahieren kann .
data2 <- data %>%
mutate(MetaDataWider = map(MetaData, ~ {
v1 <- .x[cbind(c(2, 3, 2, 2, 3), c(3, 3, 4, 5, 5))]
names(v1) <- c("type", "contable", "type_code", "region", "variable")
as_tibble_row(v1)
})
)
Ich möchte nun ifelse
dem map
/ eine Anweisung hinzufügen map_if
, um die Daten für die DIST
und SECC
-Beobachtungen korrekt zu extrahieren .
Alternativ können Sie die ifelse
Anweisung erstellen , um die Reihenfolge der Beobachtungen DIST
und zu ändern SECC
. dh
wenn
Variable.Codigo
enthältDIST
|SECC
Reihe 3 auf Reihe 2 verschieben, sonst nichts.
Dann kann ich den Code verwenden, den ich bereits habe, um die Daten zu extrahieren.
Daten:
data <- structure(list(COD = c("ADRH7218704", "ADRH7013747", "ADRH6909920"
), Nombre = c("Abrera. Edad media de la población. Dato base. ",
"Badalona distrito 02. Porcentaje de hogares unipersonales. Dato base. ",
"Santa Coloma de Gramenet sección 05009. Porcentaje de hogares unipersonales. Dato base. "
), T3_Unidad = c("Años", "Porcentaje", "Porcentaje"), T3_Escala = c(" ",
" ", " "), MetaData = list(structure(list(Id = c(72L, 5457L,
274520L), Variable = structure(list(Id = c(3L, 19L, 260L), Nombre = c("Tipo de dato",
"Municipios", "Conceptos Demográficos"), Codigo = c("", "MUN",
"")), class = "data.frame", row.names = c(NA, 3L)), Nombre = c("Dato base",
"Abrera", "Edad media de la población"), Codigo = c("", "08001",
"")), class = "data.frame", row.names = c(NA, 3L)), structure(list(
Id = c(72L, 366833L, 327739L), Variable = structure(list(
Id = c(3L, 260L, 846L), Nombre = c("Tipo de dato", "Conceptos Demográficos",
"Distritos"), Codigo = c("", "", "DIST")), class = "data.frame", row.names = c(NA,
3L)), Nombre = c("Dato base", "Porcentaje de hogares unipersonales",
"Badalona distrito 02"), Codigo = c("", "", "0801502")), class = "data.frame", row.names = c(NA,
3L)), structure(list(Id = c(72L, 366833L, 331103L), Variable = structure(list(
Id = c(3L, 260L, 847L), Nombre = c("Tipo de dato", "Conceptos Demográficos",
"Secciones"), Codigo = c("", "", "SECC")), class = "data.frame", row.names = c(NA,
3L)), Nombre = c("Dato base", "Porcentaje de hogares unipersonales",
"Santa Coloma de Gramenet sección 05009"), Codigo = c("", "",
"0824505009")), 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(39.7, 39.5, 39.2,
38.8)), 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(25.5, 25.7, 25.5, 25.8)), 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(24.1, 23.6, 22.2,
20.9)), class = "data.frame", row.names = c(NA, 4L)))), row.names = c(NA,
-3L), class = "data.frame")
Wie wäre es mit purrr::map_df
?
purrr::map_df(data$MetaData, ~ {
.x[.x$Variable$Codigo != '', ]
})
Dieser Artikel stammt aus dem Internet. Bitte geben Sie beim Nachdruck die Quelle an.
Bei Verstößen wenden Sie sich bitte [email protected] Löschen.
Lass mich ein paar Worte sagen