ProHoster > blog > Amministrazzjoni > Kolonni nested li jespandu - listi li jużaw il-lingwa R (pakkett tidyr u funzjonijiet tal-familja unnest)
Kolonni nested li jespandu - listi li jużaw il-lingwa R (pakkett tidyr u funzjonijiet tal-familja unnest)
Fil-biċċa l-kbira tal-każijiet, meta taħdem b'rispons riċevut minn API, jew ma 'kwalunkwe data oħra li għandha struttura ta' siġra kumplessa, tkun iffaċċjat b'formati JSON u XML.
Dawn il-formati għandhom ħafna vantaġġi: jaħżnu d-dejta b'mod pjuttost kompatt u jippermettulek tevita duplikazzjoni bla bżonn ta 'informazzjoni.
L-iżvantaġġ ta 'dawn il-formati huwa l-kumplessità tal-ipproċessar u l-analiżi tagħhom. Data mhux strutturata ma tistax tintuża fil-kalkoli u l-viżwalizzazzjoni ma tistax tinbena fuqha.
Dan l-artikolu huwa kontinwazzjoni loġika tal-pubblikazzjoni "R package tidyr u l-funzjonijiet il-ġodda tiegħu pivot_longer u pivot_wider". Dan jgħinek iġġib strutturi tad-dejta mhux strutturati f'forma tabulari familjari u adattata għall-analiżi bl-użu tal-pakkett tidyr, inkluż fil-qalba tal-librerija tidyverse, u l-familja tal-funzjonijiet tagħha unnest_*().
Kontenut
Jekk inti interessat fl-analiżi tad-dejta, tista' tkun interessat f'tiegħi telegramma и YouTube kanali. Ħafna mill-kontenut huwa ddedikat għal-lingwa R.
Rettangolar(nota tat-traduttur, ma sibtx għażliet ta’ traduzzjoni adegwati għal dan it-terminu, allura nħalluh kif inhu.) huwa l-proċess li tinġieb data mhux strutturata b'arrays nested f'tabella bidimensjonali li tikkonsisti f'ringieli u kolonni familjari. IN tidyr Hemm diversi funzjonijiet li jgħinuk tespandi l-kolonni tal-lista imnaqqsa u tnaqqas id-dejta għal forma rettangolari u tabulari:
unnest_longer() jieħu kull element tal-lista tal-kolonni u joħloq ringiela ġdida.
unnest_wider() jieħu kull element tal-lista tal-kolonni u joħloq kolonna ġdida.
unnest_auto() awtomatikament jiddetermina liema funzjoni hija l-aħjar li tuża unnest_longer() jew unnest_wider().
hoist() simili għal unnest_wider() iżda jagħżel biss il-komponenti speċifikati u jippermettilek taħdem b'diversi livelli ta 'bejta.
Il-biċċa l-kbira tal-problemi assoċjati mad-dħul ta 'dejta mhux strutturata b'diversi livelli ta' nesting f'tabella bidimensjonali jistgħu jiġu solvuti billi tgħaqqad il-funzjonijiet elenkati ma 'dplyr.
Biex nuru dawn it-tekniki, se nużaw il-pakkett repurrrsive, li jipprovdi listi multipli kumplessi u f'diversi livelli derivati minn API tal-web.
Nibdew bl gh_users, lista li fiha informazzjoni dwar sitt utenti GitHub. L-ewwel ejja nittrasformaw il-lista gh_users в tibble frejm:
users <- tibble( user = gh_users )
Dan jidher ftit kontrointuwittiv: għaliex tipprovdi lista gh_users, għal struttura ta' data aktar kumplessa? Iżda qafas tad-dejta għandu vantaġġ kbir: jgħaqqad vettori multipli sabiex kollox jiġi ssorveljat f'oġġett wieħed.
Kull element oġġett users hija lista msemmija li fiha kull element jirrappreżenta kolonna.
F'dan il-każ, għandna tabella li tikkonsisti minn 30 kolonna, u mhux se jkollna bżonn ħafna minnhom, għalhekk nistgħu minflok unnest_wider() użu hoist(). hoist() jippermettilna estratt komponenti magħżula billi tuża l-istess sintassi bħal 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() ineħħi l-komponenti msemmija speċifikati minn lista ta' kolonni utentsabiex inti tista 'tikkunsidra hoist() bħal komponenti li jiċċaqalqu mil-lista interna ta 'qafas tad-data għall-ogħla livell tiegħu.
Repożitorji Github
Lista allinjament gh_repos nibdew bl-istess mod billi naqilbuh għal tibble:
Din id-darba l-elementi utent jirrappreżentaw lista ta’ repożitorji li huma proprjetà ta’ dan l-utent. Kull repożitorju huwa osservazzjoni separata, għalhekk skond il-kunċett ta 'dejta pulita (madwar data imbarazzata) għandhom isiru linji ġodda, u huwa għalhekk li nużaw unnest_longer() imma mhux 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
Issa nistgħu nużaw unnest_wider() jew 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
Oqgħod attent għall-użu c("owner", "login"): Dan jippermettilna niksbu l-valur tat-tieni livell minn lista nested owner. Approċċ alternattiv huwa li tinkiseb il-lista kollha owner u mbagħad tuża l-funzjoni unnest_wider() poġġi kull wieħed mill-elementi tiegħu f'kolonna:
Minflok taħseb dwar l-għażla tal-funzjoni t-tajba unnest_longer() jew unnest_wider() tista' tuża unnest_auto(). Din il-funzjoni tuża diversi metodi euristiċi biex tagħżel l-iktar funzjoni adattata għat-trasformazzjoni tad-dejta, u turi messaġġ dwar il-metodu magħżul.
got_chars għandha struttura identika għal gh_users: Dan huwa sett ta' listi msemmija, fejn kull element tal-lista ta' ġewwa jiddeskrivi xi attribut ta' karattru ta' Game of Thrones. Ġib got_chars Għall-veduta tat-tabella, nibdew billi noħolqu qafas tad-data, bħal fl-eżempji preċedenti, u mbagħad nikkonverti kull element f'kolonna separata:
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>
Struttura got_chars kemmxejn aktar diffiċli milli gh_users, għax xi komponenti tal-lista char infushom huma lista, bħala riżultat aħna jkollna pilastri - listi:
L-azzjonijiet ulterjuri tiegħek jiddependu fuq l-għanijiet tal-analiżi. Forsi trid tpoġġi informazzjoni fuq il-linji għal kull ktieb u serje li fiha jidher il-karattru:
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
Jew forsi trid toħloq tabella li tippermettilek tqabbel il-karattru u x-xogħol:
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
(Innota l-valuri vojta "" fil-qasam title, dan huwa dovut għal żbalji li saru meta ddaħħal id-dejta got_chars: fil-fatt, karattri li għalihom m'hemmx titoli korrispondenti ta' kotba u serje televiżivi fil-qasam title irid ikollu vettur ta' tul 0, mhux vettur ta' tul 1 li jkun fih is-sekwenza vojta.)
Nistgħu nikteb l-eżempju ta 'hawn fuq billi tuża l-funzjoni unnest_auto(). Dan l-approċċ huwa konvenjenti għal analiżi ta 'darba, iżda m'għandekx tistrieħ fuqha unnest_auto() għall-użu fuq bażi regolari. Il-punt huwa li jekk l-istruttura tad-dejta tiegħek tinbidel unnest_auto() tista 'tbiddel il-mekkaniżmu ta' trasformazzjoni tad-data magħżula jekk inizjalment espanda kolonni lista f'ringieli bl-użu unnest_longer(), imbagħad meta l-istruttura tad-dejta li tidħol tinbidel, il-loġika tista 'tiġi mibdula favur unnest_wider(), u l-użu ta' dan l-approċċ fuq bażi kontinwa jista' jwassal għal żbalji mhux mistennija.
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 bil-Google
Sussegwentement, ser inħarsu lejn struttura aktar kumplessa tad-dejta miksuba mis-servizz ta 'ġeokodifikazzjoni ta' Google. Il-kredenzjali tal-caching huwa kontra r-regoli tal-ħidma mal-API tal-mapep tal-Google, għalhekk l-ewwel ser nikteb tgeżwir sempliċi madwar l-API. Li hija bbażata fuq il-ħażna taċ-ċavetta tal-API tal-Google Maps f'varjabbli tal-ambjent; Jekk ma jkollokx iċ-ċavetta biex taħdem mal-API tal-Google Maps maħżuna fil-varjabbli tal-ambjent tiegħek, il-frammenti tal-kodiċi ppreżentati f'din it-taqsima ma jiġux eżegwiti.
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)
}
Il-lista li tagħti din il-funzjoni hija pjuttost kumplessa:
Fortunatament, nistgħu nsolvu l-problema tal-konverżjoni ta 'din id-dejta f'forma tabulari pass pass billi tuża funzjonijiet tidyr. Biex tagħmel il-kompitu ftit aktar ta 'sfida u realistiku, ser nibda billi nikkodifika ġeografikament ftit bliet:
city <- c ( "Houston" , "LA" , "New York" , "Chicago" , "Springfield" ) city_geo <- purrr::map (city, geocode)
Se nikkonverti r-riżultat li jirriżulta fi tibble, għall-konvenjenza, se nżid kolonna bl-isem tal-belt korrispondenti.
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]>
L-ewwel livell fih komponenti status и result, li nistgħu nespandu magħhom 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
innota li results hija lista fuq diversi livelli. Il-biċċa l-kbira tal-bliet għandhom element 1 (li jirrappreżenta valur uniku li jikkorrispondi għall-API tal-ġeokodifikazzjoni), iżda Springfield għandha tnejn. Nistgħu niġbduhom f'linji separati bi 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
Issa kollha għandhom l-istess komponenti, li jistgħu jiġu vverifikati bl-użu 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
Nistgħu nsibu l-koordinati tal-latitudni u l-lonġitudni ta' kull belt billi nespandu l-lista 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>
U mbagħad il-post li għalih għandek bżonn tespandi 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>
Għal darb'oħra, unnest_auto() jissimplifika l-operazzjoni deskritta b'xi riskji li jistgħu jiġu kkawżati billi tinbidel l-istruttura tad-dejta li tidħol:
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>
Nistgħu wkoll inħarsu lejn l-ewwel indirizz għal kull belt:
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>
Jew uża hoist() għal adsa f'diversi livelli biex tmur direttament għaliha 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]>
Diskografija ta' Sharla Gelfand
Fl-aħħarnett, se nħarsu lejn l-aktar struttura kumplessa - id-diskografija ta 'Sharla Gelfand. Bħal fl-eżempji ta 'hawn fuq, nibdew billi nikkonverti l-lista għal qafas tad-dejta b'kolonna waħda, u mbagħad testendiha sabiex kull komponent ikun kolonna separata. Ukoll nittrasforma l-kolonna date_added għall-format xieraq tad-data u l-ħin f’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
F'dan il-livell, inġibu informazzjoni dwar meta kull diska ġiet miżjuda mad-diskografija ta' Sharla, iżda ma naraw l-ebda dejta dwar dawk id-diski. Biex nagħmlu dan irridu nespandu l-kolonna basic_information:
discs %>% unnest_wider(basic_information)
#> Column name `id` must not be duplicated.
#> Use .name_repair to specify repair.
Sfortunatament, se nirċievu żball, għax... ġewwa l-lista basic_information hemm kolonna bl-istess isem basic_information. Jekk iseħħ żball bħal dan, sabiex tiddetermina malajr il-kawża tiegħu, tista 'tuża names_repair = "unique":
Tista' mbagħad tingħaqad magħhom lura għas-sett tad-dejta oriġinali kif meħtieġ.
Konklużjoni
Sal-qalba tal-librerija tidyverse jinkludi ħafna pakketti utli magħquda minn filosofija komuni għall-ipproċessar tad-dejta.
F'dan l-artikolu eżaminajna l-familja tal-funzjonijiet unnest_*(), li huma mmirati biex jaħdmu bl-estrazzjoni ta 'elementi minn listi nested. Dan il-pakkett fih ħafna karatteristiċi utli oħra li jagħmluha aktar faċli biex tikkonverti d-dejta skont il-kunċett Dejta Imbarazzata.