ProHoster > Блог > Pagdumala > Pagpalapad sa mga nested column - mga lista gamit ang R nga pinulongan (tidyr package ug mga function sa unnest nga pamilya)
Pagpalapad sa mga nested column - mga lista gamit ang R nga pinulongan (tidyr package ug mga function sa unnest nga pamilya)
Sa kadaghanan nga mga kaso, kung nagtrabaho uban ang tubag nga nadawat gikan sa usa ka API, o sa bisan unsang uban nga datos nga adunay komplikado nga istruktura sa kahoy, nag-atubang ka sa mga format sa JSON ug XML.
Kini nga mga format adunay daghang mga bentaha: sila nagtipig sa datos nga medyo compact ug gitugotan ka nga malikayan ang dili kinahanglan nga pagdoble sa kasayuran.
Ang disbentaha niini nga mga format mao ang pagkakomplikado sa ilang pagproseso ug pagtuki. Ang dili istruktura nga datos dili magamit sa mga kalkulasyon ug ang visualization dili matukod niini.
Kini nga artikulo usa ka lohikal nga pagpadayon sa publikasyon "R package tidyr ug ang bag-ong function niini pivot_longer ug pivot_wider". Makatabang kini kanimo nga madala ang dili istruktura nga mga istruktura sa datos sa usa ka pamilyar ug angay alang sa pagtuki sa tabular nga porma gamit ang pakete tidyr, gilakip sa kinauyokan sa librarya tidyverse, ug ang pamilya sa mga gimbuhaton unnest_*().
Mga sulod
Kung interesado ka sa pagtuki sa datos, mahimong interesado ka sa akong telegram и youtube mga kanal. Kadaghanan sa sulod niini gipahinungod sa R nga pinulongan.
Rectangling(pahinumdom sa maghuhubad, wala koy nakit-an nga igo nga mga kapilian sa paghubad alang niini nga termino, mao nga ibilin namon kini kung unsa kini.) mao ang proseso sa pagdala sa unstructured data uban sa nested arrays ngadto sa usa ka two-dimensional table nga gilangkuban sa pamilyar nga mga row ug columns. SA tidyr Adunay ubay-ubay nga mga gimbuhaton nga makatabang kanimo sa pagpalapad sa mga nested list column ug pagpakunhod sa datos ngadto sa rectangular, tabular nga porma:
unnest_longer() nagkuha sa matag elemento sa lista sa kolum ug nagmugna og bag-ong laray.
unnest_wider() nagkuha sa matag elemento sa lista sa kolum ug nagmugna og bag-ong kolum.
unnest_auto() awtomatik nga matino kung unsang function ang labing maayo nga gamiton unnest_longer() o unnest_wider().
hoist() susama sa unnest_wider() apan nagpili lamang sa gipiho nga mga sangkap ug nagtugot kanimo sa pagtrabaho uban ang daghang lebel sa nesting.
Kadaghanan sa mga problema nga nalangkit sa pagdala sa wala'y istruktura nga datos nga adunay daghang lebel sa nesting ngadto sa duha ka dimensyon nga lamesa mahimong masulbad pinaagi sa paghiusa sa nalista nga mga gimbuhaton uban sa dplyr.
Aron ipakita kini nga mga teknik, among gamiton ang pakete repurrrsive, nga naghatag daghang komplikado, daghang lebel nga mga lista nga nakuha gikan sa usa ka web API.
Magsugod uban gh_users, usa ka lista nga adunay impormasyon bahin sa unom ka tiggamit sa GitHub. Una atong usbon ang listahan gh_users в tibble bayanan:
users <- tibble( user = gh_users )
Kini daw usa ka gamay nga counterintuitive: nganong maghatag ug lista gh_users, ngadto sa mas komplikado nga istruktura sa datos? Apan ang usa ka data frame adunay usa ka dako nga bentaha: kini naghiusa sa daghang mga vector aron ang tanan masubay sa usa ka butang.
Ang matag butang nga elemento users usa ka lista nga ginganlan diin ang matag elemento nagrepresentar sa usa ka kolum.
Sa kini nga kaso, kami adunay usa ka lamesa nga gilangkuban sa 30 nga mga kolum, ug dili namon kinahanglan ang kadaghanan niini, aron mahimo namon unnest_wider() paggamit hoist(). hoist() nagtugot kanamo sa pagkuha sa pinili nga mga sangkap gamit ang sama nga syntax sama sa purrr::pluck():
users %>% hoist(user,
followers = "followers",
login = "login",
url = "html_url"
)
#> # A tibble: 6 x 4
#> followers login url user
#> <int> <chr> <chr> <list>
#> 1 303 gaborcsardi https://github.com/gaborcsardi <named list [27]>
#> 2 780 jennybc https://github.com/jennybc <named list [27]>
#> 3 3958 jtleek https://github.com/jtleek <named list [27]>
#> 4 115 juliasilge https://github.com/juliasilge <named list [27]>
#> 5 213 leeper https://github.com/leeper <named list [27]>
#> 6 34 masalmon https://github.com/masalmon <named list [27]>
hoist() nagtangtang sa gipiho nga mga sangkap gikan sa usa ka lista sa kolum userpara makonsiderar nimo hoist() sama sa pagbalhin sa mga sangkap gikan sa internal nga lista sa usa ka frame sa petsa hangtod sa taas nga lebel niini.
Github repository
Pag-align sa listahan gh_repos kita magsugod sa susama pinaagi sa pagkabig niini ngadto sa tibble:
Niining higayona ang mga elemento user nagrepresentar sa usa ka lista sa mga repository nga gipanag-iya niini nga tiggamit. Ang matag repository usa ka lahi nga obserbasyon, busa sumala sa konsepto sa hapsay nga datos (gibanabana nga hapsay nga datos) sila kinahanglan nga mahimong bag-ong mga linya, mao nga kita sa paggamit unnest_longer() ug dili unnest_wider():
repos <- repos %>% unnest_longer(repo)
repos
#> # A tibble: 176 x 1
#> repo
#> <list>
#> 1 <named list [68]>
#> 2 <named list [68]>
#> 3 <named list [68]>
#> 4 <named list [68]>
#> 5 <named list [68]>
#> 6 <named list [68]>
#> 7 <named list [68]>
#> 8 <named list [68]>
#> 9 <named list [68]>
#> 10 <named list [68]>
#> # … with 166 more rows
Karon atong magamit unnest_wider() o hoist() :
repos %>% hoist(repo,
login = c("owner", "login"),
name = "name",
homepage = "homepage",
watchers = "watchers_count"
)
#> # A tibble: 176 x 5
#> login name homepage watchers repo
#> <chr> <chr> <chr> <int> <list>
#> 1 gaborcsardi after <NA> 5 <named list [65]>
#> 2 gaborcsardi argufy <NA> 19 <named list [65]>
#> 3 gaborcsardi ask <NA> 5 <named list [65]>
#> 4 gaborcsardi baseimports <NA> 0 <named list [65]>
#> 5 gaborcsardi citest <NA> 0 <named list [65]>
#> 6 gaborcsardi clisymbols "" 18 <named list [65]>
#> 7 gaborcsardi cmaker <NA> 0 <named list [65]>
#> 8 gaborcsardi cmark <NA> 0 <named list [65]>
#> 9 gaborcsardi conditions <NA> 0 <named list [65]>
#> 10 gaborcsardi crayon <NA> 52 <named list [65]>
#> # … with 166 more rows
Hatagi'g pagtagad ang gamit c("owner", "login"): Kini nagtugot kanato sa pagkuha sa ikaduhang lebel nga bili gikan sa usa ka salag nga listahan owner. Usa ka alternatibo nga pamaagi mao ang pagkuha sa tibuok listahan owner ug dayon gamiton ang function unnest_wider() ibutang ang matag usa sa mga elemento niini sa usa ka kolum:
Imbis nga maghunahuna bahin sa pagpili sa husto nga function unnest_longer() o unnest_wider() magamit nimo unnest_auto(). Kini nga function naggamit sa daghang mga heuristic nga pamaagi aron mapili ang labing angay nga function alang sa pagbag-o sa datos, ug magpakita usa ka mensahe bahin sa gipili nga pamaagi.
got_chars adunay parehas nga istruktura sa gh_users: Kini usa ka hugpong sa mga gihinganlan nga mga lista, diin ang matag elemento sa sulod nga listahan naghulagway sa pipila ka kinaiya sa usa ka Game of Thrones nga karakter. Pagdala got_chars Alang sa talan-awon sa lamesa, magsugod kita pinaagi sa paghimo og frame sa petsa, sama sa nangaging mga pananglitan, ug dayon i-convert ang matag elemento ngadto sa lain nga kolum:
chars <- tibble(char = got_chars)
chars
#> # A tibble: 30 x 1
#> char
#> <list>
#> 1 <named list [18]>
#> 2 <named list [18]>
#> 3 <named list [18]>
#> 4 <named list [18]>
#> 5 <named list [18]>
#> 6 <named list [18]>
#> 7 <named list [18]>
#> 8 <named list [18]>
#> 9 <named list [18]>
#> 10 <named list [18]>
#> # … with 20 more rows
chars2 <- chars %>% unnest_wider(char)
chars2
#> # A tibble: 30 x 18
#> url id name gender culture born died alive titles aliases father
#> <chr> <int> <chr> <chr> <chr> <chr> <chr> <lgl> <list> <list> <chr>
#> 1 http… 1022 Theo… Male Ironbo… In 2… "" TRUE <chr … <chr [… ""
#> 2 http… 1052 Tyri… Male "" In 2… "" TRUE <chr … <chr [… ""
#> 3 http… 1074 Vict… Male Ironbo… In 2… "" TRUE <chr … <chr [… ""
#> 4 http… 1109 Will Male "" "" In 2… FALSE <chr … <chr [… ""
#> 5 http… 1166 Areo… Male Norvos… In 2… "" TRUE <chr … <chr [… ""
#> 6 http… 1267 Chett Male "" At H… In 2… FALSE <chr … <chr [… ""
#> 7 http… 1295 Cres… Male "" In 2… In 2… FALSE <chr … <chr [… ""
#> 8 http… 130 Aria… Female Dornish In 2… "" TRUE <chr … <chr [… ""
#> 9 http… 1303 Daen… Female Valyri… In 2… "" TRUE <chr … <chr [… ""
#> 10 http… 1319 Davo… Male Wester… In 2… "" TRUE <chr … <chr [… ""
#> # … with 20 more rows, and 7 more variables: mother <chr>, spouse <chr>,
#> # allegiances <list>, books <list>, povBooks <list>, tvSeries <list>,
#> # playedBy <list>
gambalay got_chars medyo mas lisud kay sa gh_users, kay pipila ka listahan sa mga sangkap char ang ilang kaugalingon usa ka lista, ingon usa ka sangputanan nakakuha kami mga haligi - mga lista:
Ang imong dugang nga mga aksyon nagdepende sa mga katuyoan sa pagtuki. Tingali kinahanglan nimo nga ibutang ang kasayuran sa mga linya alang sa matag libro ug serye diin makita ang karakter:
chars2 %>%
select(name, books, tvSeries) %>%
pivot_longer(c(books, tvSeries), names_to = "media", values_to = "value") %>%
unnest_longer(value)
#> # A tibble: 180 x 3
#> name media value
#> <chr> <chr> <chr>
#> 1 Theon Greyjoy books A Game of Thrones
#> 2 Theon Greyjoy books A Storm of Swords
#> 3 Theon Greyjoy books A Feast for Crows
#> 4 Theon Greyjoy tvSeries Season 1
#> 5 Theon Greyjoy tvSeries Season 2
#> 6 Theon Greyjoy tvSeries Season 3
#> 7 Theon Greyjoy tvSeries Season 4
#> 8 Theon Greyjoy tvSeries Season 5
#> 9 Theon Greyjoy tvSeries Season 6
#> 10 Tyrion Lannister books A Feast for Crows
#> # … with 170 more rows
O tingali gusto nimong maghimo usa ka lamesa nga nagtugot kanimo sa pagpares sa karakter ug trabaho:
chars2 %>%
select(name, title = titles) %>%
unnest_longer(title)
#> # A tibble: 60 x 2
#> name title
#> <chr> <chr>
#> 1 Theon Greyjoy Prince of Winterfell
#> 2 Theon Greyjoy Captain of Sea Bitch
#> 3 Theon Greyjoy Lord of the Iron Islands (by law of the green lands)
#> 4 Tyrion Lannister Acting Hand of the King (former)
#> 5 Tyrion Lannister Master of Coin (former)
#> 6 Victarion Greyjoy Lord Captain of the Iron Fleet
#> 7 Victarion Greyjoy Master of the Iron Victory
#> 8 Will ""
#> 9 Areo Hotah Captain of the Guard at Sunspear
#> 10 Chett ""
#> # … with 50 more rows
(Tan-awa ang walay sulod nga mga bili "" sa uma title, kini tungod sa mga sayup nga nahimo sa pagsulod sa datos got_chars: sa pagkatinuod, mga karakter nga walay katugbang nga libro ug mga titulo sa serye sa TV sa natad title kinahanglan adunay usa ka vector sa gitas-on 0, dili usa ka vector sa gitas-on 1 nga adunay sulod nga walay sulod nga pisi.)
Mahimo natong isulat pag-usab ang pananglitan sa ibabaw gamit ang function unnest_auto(). Kini nga pamaagi kombenyente alang sa usa ka higayon nga pag-analisar, apan dili ka kinahanglan magsalig unnest_auto() alang sa paggamit sa usa ka regular nga basehan. Ang punto mao nga kung ang imong istruktura sa datos mausab unnest_auto() mahimong usbon ang pinili nga mekanismo sa pagbag-o sa datos kon kini sa sinugdan gipalapdan ang mga kolum sa listahan ngadto sa mga laray gamit unnest_longer(), unya kung ang istruktura sa umaabot nga datos mausab, ang lohika mahimong mausab pabor unnest_wider(), ug ang paggamit niini nga paagi sa padayon nga basehan mahimong mosangpot sa wala damhang mga sayop.
tibble(char = got_chars) %>%
unnest_auto(char) %>%
select(name, title = titles) %>%
unnest_auto(title)
#> Using `unnest_wider(char)`; elements have 18 names in common
#> Using `unnest_longer(title)`; no element has names
#> # A tibble: 60 x 2
#> name title
#> <chr> <chr>
#> 1 Theon Greyjoy Prince of Winterfell
#> 2 Theon Greyjoy Captain of Sea Bitch
#> 3 Theon Greyjoy Lord of the Iron Islands (by law of the green lands)
#> 4 Tyrion Lannister Acting Hand of the King (former)
#> 5 Tyrion Lannister Master of Coin (former)
#> 6 Victarion Greyjoy Lord Captain of the Iron Fleet
#> 7 Victarion Greyjoy Master of the Iron Victory
#> 8 Will ""
#> 9 Areo Hotah Captain of the Guard at Sunspear
#> 10 Chett ""
#> # … with 50 more rows
Geocoding uban sa Google
Sunod, atong tan-awon ang mas komplikado nga istruktura sa datos nga nakuha gikan sa serbisyo sa geocoding sa Google. Ang mga kredensyal sa pag-cache supak sa mga lagda sa pagtrabaho sa Google maps API, mao nga magsulat una ko og usa ka yano nga wrapper sa palibot sa API. Nga gibase sa pagtipig sa Google Maps API key sa usa ka variable sa palibot; Kung wala kay yawe sa pagtrabaho kauban ang Google Maps API nga gitipigan sa imong mga variable sa palibot, ang mga tipik sa code nga gipresentar niini nga seksyon dili ipatuman.
has_key <- !identical(Sys.getenv("GOOGLE_MAPS_API_KEY"), "")
if (!has_key) {
message("No Google Maps API key found; code chunks will not be run")
}
# https://developers.google.com/maps/documentation/geocoding
geocode <- function(address, api_key = Sys.getenv("GOOGLE_MAPS_API_KEY")) {
url <- "https://maps.googleapis.com/maps/api/geocode/json"
url <- paste0(url, "?address=", URLencode(address), "&key=", api_key)
jsonlite::read_json(url)
}
Ang lista nga gibalik niini nga function medyo komplikado:
Maayo na lang, masulbad namon ang problema sa pag-convert niini nga datos ngadto sa usa ka tabular nga porma nga lakang sa lakang gamit ang mga function tidyr. Aron mahimo ang buluhaton nga mas mahagiton ug realistiko, magsugod ako pinaagi sa geocoding sa pipila ka mga lungsod:
city <- c ( "Houston" , "LA" , "New York" , "Chicago" , "Springfield" ) city_geo <- purrr::map (city, geocode)
Akong i-convert ang resulta nga resulta ngadto sa tibble, para sa kasayon, magdugang ko og kolum nga adunay katugbang nga ngalan sa siyudad.
loc <- tibble(city = city, json = city_geo)
loc
#> # A tibble: 5 x 2
#> city json
#> <chr> <list>
#> 1 Houston <named list [2]>
#> 2 LA <named list [2]>
#> 3 New York <named list [2]>
#> 4 Chicago <named list [2]>
#> 5 Springfield <named list [2]>
Ang una nga lebel adunay mga sangkap status и result, nga mahimo natong mapalapad unnest_wider() :
loc %>%
unnest_wider(json)
#> # A tibble: 5 x 3
#> city results status
#> <chr> <list> <chr>
#> 1 Houston <list [1]> OK
#> 2 LA <list [1]> OK
#> 3 New York <list [1]> OK
#> 4 Chicago <list [1]> OK
#> 5 Springfield <list [1]> OK
timan-i nga results usa ka multi-level nga listahan. Kadaghanan sa mga syudad adunay 1 nga elemento (nagrepresentar sa usa ka talagsaon nga kantidad nga katumbas sa geocoding API), apan ang Springfield adunay duha. Mahimo natong ibira sila ngadto sa lain-laing mga linya sa unnest_longer() :
loc %>%
unnest_wider(json) %>%
unnest_longer(results)
#> # A tibble: 5 x 3
#> city results status
#> <chr> <list> <chr>
#> 1 Houston <named list [5]> OK
#> 2 LA <named list [5]> OK
#> 3 New York <named list [5]> OK
#> 4 Chicago <named list [5]> OK
#> 5 Springfield <named list [5]> OK
Karon silang tanan adunay parehas nga mga sangkap, nga mahimong mapamatud-an gamit unnest_wider():
loc %>%
unnest_wider(json) %>%
unnest_longer(results) %>%
unnest_wider(results)
#> # A tibble: 5 x 7
#> city address_componen… formatted_addre… geometry place_id types status
#> <chr> <list> <chr> <list> <chr> <lis> <chr>
#> 1 Houst… <list [4]> Houston, TX, USA <named … ChIJAYWN… <lis… OK
#> 2 LA <list [4]> Los Angeles, CA… <named … ChIJE9on… <lis… OK
#> 3 New Y… <list [3]> New York, NY, U… <named … ChIJOwg_… <lis… OK
#> 4 Chica… <list [4]> Chicago, IL, USA <named … ChIJ7cv0… <lis… OK
#> 5 Sprin… <list [5]> Springfield, MO… <named … ChIJP5jI… <lis… OK
Makita nato ang latitude ug longitude coordinates sa matag siyudad pinaagi sa pagpalapad sa listahan geometry:
loc %>%
unnest_wider(json) %>%
unnest_longer(results) %>%
unnest_wider(results) %>%
unnest_wider(geometry)
#> # A tibble: 5 x 10
#> city address_compone… formatted_addre… bounds location location_type
#> <chr> <list> <chr> <list> <list> <chr>
#> 1 Hous… <list [4]> Houston, TX, USA <name… <named … APPROXIMATE
#> 2 LA <list [4]> Los Angeles, CA… <name… <named … APPROXIMATE
#> 3 New … <list [3]> New York, NY, U… <name… <named … APPROXIMATE
#> 4 Chic… <list [4]> Chicago, IL, USA <name… <named … APPROXIMATE
#> 5 Spri… <list [5]> Springfield, MO… <name… <named … APPROXIMATE
#> # … with 4 more variables: viewport <list>, place_id <chr>, types <list>,
#> # status <chr>
Ug dayon ang lokasyon diin kinahanglan nimo nga palapdan location:
loc %>%
unnest_wider(json) %>%
unnest_longer(results) %>%
unnest_wider(results) %>%
unnest_wider(geometry) %>%
unnest_wider(location)
#> # A tibble: 5 x 11
#> city address_compone… formatted_addre… bounds lat lng location_type
#> <chr> <list> <chr> <list> <dbl> <dbl> <chr>
#> 1 Hous… <list [4]> Houston, TX, USA <name… 29.8 -95.4 APPROXIMATE
#> 2 LA <list [4]> Los Angeles, CA… <name… 34.1 -118. APPROXIMATE
#> 3 New … <list [3]> New York, NY, U… <name… 40.7 -74.0 APPROXIMATE
#> 4 Chic… <list [4]> Chicago, IL, USA <name… 41.9 -87.6 APPROXIMATE
#> 5 Spri… <list [5]> Springfield, MO… <name… 37.2 -93.3 APPROXIMATE
#> # … with 4 more variables: viewport <list>, place_id <chr>, types <list>,
#> # status <chr>
Pag-usab, unnest_auto() gipasimple ang gihulagway nga operasyon nga adunay pipila ka mga risgo nga mahimong hinungdan sa pagbag-o sa istruktura sa umaabot nga datos:
loc %>%
unnest_auto(json) %>%
unnest_auto(results) %>%
unnest_auto(results) %>%
unnest_auto(geometry) %>%
unnest_auto(location)
#> Using `unnest_wider(json)`; elements have 2 names in common
#> Using `unnest_longer(results)`; no element has names
#> Using `unnest_wider(results)`; elements have 5 names in common
#> Using `unnest_wider(geometry)`; elements have 4 names in common
#> Using `unnest_wider(location)`; elements have 2 names in common
#> # A tibble: 5 x 11
#> city address_compone… formatted_addre… bounds lat lng location_type
#> <chr> <list> <chr> <list> <dbl> <dbl> <chr>
#> 1 Hous… <list [4]> Houston, TX, USA <name… 29.8 -95.4 APPROXIMATE
#> 2 LA <list [4]> Los Angeles, CA… <name… 34.1 -118. APPROXIMATE
#> 3 New … <list [3]> New York, NY, U… <name… 40.7 -74.0 APPROXIMATE
#> 4 Chic… <list [4]> Chicago, IL, USA <name… 41.9 -87.6 APPROXIMATE
#> 5 Spri… <list [5]> Springfield, MO… <name… 37.2 -93.3 APPROXIMATE
#> # … with 4 more variables: viewport <list>, place_id <chr>, types <list>,
#> # status <chr>
Mahimo usab natong tan-awon ang unang adres sa matag siyudad:
loc %>%
unnest_wider(json) %>%
hoist(results, first_result = 1) %>%
unnest_wider(first_result) %>%
unnest_wider(geometry) %>%
unnest_wider(location)
#> # A tibble: 5 x 11
#> city address_compone… formatted_addre… bounds lat lng location_type
#> <chr> <list> <chr> <list> <dbl> <dbl> <chr>
#> 1 Hous… <list [4]> Houston, TX, USA <name… 29.8 -95.4 APPROXIMATE
#> 2 LA <list [4]> Los Angeles, CA… <name… 34.1 -118. APPROXIMATE
#> 3 New … <list [3]> New York, NY, U… <name… 40.7 -74.0 APPROXIMATE
#> 4 Chic… <list [4]> Chicago, IL, USA <name… 41.9 -87.6 APPROXIMATE
#> 5 Spri… <list [5]> Springfield, MO… <name… 37.2 -93.3 APPROXIMATE
#> # … with 4 more variables: viewport <list>, place_id <chr>, types <list>,
#> # status <chr>
O gamiton hoist() alang sa usa ka multi-level dive nga direktang moadto lat и lng.
loc %>%
hoist(json,
lat = list("results", 1, "geometry", "location", "lat"),
lng = list("results", 1, "geometry", "location", "lng")
)
#> # A tibble: 5 x 4
#> city lat lng json
#> <chr> <dbl> <dbl> <list>
#> 1 Houston 29.8 -95.4 <named list [2]>
#> 2 LA 34.1 -118. <named list [2]>
#> 3 New York 40.7 -74.0 <named list [2]>
#> 4 Chicago 41.9 -87.6 <named list [2]>
#> 5 Springfield 37.2 -93.3 <named list [2]>
Discography ni Sharla Gelfand
Sa katapusan, atong tan-awon ang labing komplikado nga istruktura - ang discography ni Sharla Gelfand. Sama sa mga pananglitan sa ibabaw, magsugod kita pinaagi sa pag-convert sa listahan ngadto sa usa ka kolum nga data frame, ug dayon i-extend kini aron ang matag component usa ka bulag nga kolum. Gibag-o usab nako ang kolum date_added sa angay nga format sa petsa ug oras sa R.
discs <- tibble(disc = discog) %>%
unnest_wider(disc) %>%
mutate(date_added = as.POSIXct(strptime(date_added, "%Y-%m-%dT%H:%M:%S")))
discs
#> # A tibble: 155 x 5
#> instance_id date_added basic_information id rating
#> <int> <dttm> <list> <int> <int>
#> 1 354823933 2019-02-16 17:48:59 <named list [11]> 7496378 0
#> 2 354092601 2019-02-13 14:13:11 <named list [11]> 4490852 0
#> 3 354091476 2019-02-13 14:07:23 <named list [11]> 9827276 0
#> 4 351244906 2019-02-02 11:39:58 <named list [11]> 9769203 0
#> 5 351244801 2019-02-02 11:39:37 <named list [11]> 7237138 0
#> 6 351052065 2019-02-01 20:40:53 <named list [11]> 13117042 0
#> 7 350315345 2019-01-29 15:48:37 <named list [11]> 7113575 0
#> 8 350315103 2019-01-29 15:47:22 <named list [11]> 10540713 0
#> 9 350314507 2019-01-29 15:44:08 <named list [11]> 11260950 0
#> 10 350314047 2019-01-29 15:41:35 <named list [11]> 11726853 0
#> # … with 145 more rows
Sa kini nga lebel, makakuha kami kasayuran kung kanus-a gidugang ang matag disc sa discography ni Sharla, apan wala kami makita nga datos bahin sa mga disc. Aron mahimo kini kinahanglan namon nga palapdan ang kolum basic_information:
discs %>% unnest_wider(basic_information)
#> Column name `id` must not be duplicated.
#> Use .name_repair to specify repair.
Ikasubo, makadawat kami usa ka sayup, tungod kay ... sulod sa listahan basic_information adunay usa ka kolum sa parehas nga ngalan basic_information. Kung mahitabo ang ingon nga sayup, aron dali nga mahibal-an ang hinungdan niini, mahimo nimong gamiton names_repair = "unique":
Mahimo nimong iapil sila balik sa orihinal nga dataset kung gikinahanglan.
konklusyon
Ngadto sa kinauyokan sa librarya tidyverse naglakip sa daghang mapuslanon nga mga pakete nga gihiusa sa usa ka komon nga pilosopiya sa pagproseso sa datos.
Niini nga artikulo among gisusi ang pamilya sa mga gimbuhaton unnest_*(), nga gitumong sa pagtrabaho uban sa pagkuha sa mga elemento gikan sa mga nested list. Kini nga pakete adunay daghang uban pang mapuslanon nga mga bahin nga nagpadali sa pag-convert sa datos sumala sa konsepto Limpyo nga Data.