ProHoster > Blog > Rianachd > A’ leudachadh cholbhan neadachaidh - liostaichean a’ cleachdadh a’ chànan R (pasgan sgiobalta agus gnìomhan an teaghlaich neo-neònach)
A’ leudachadh cholbhan neadachaidh - liostaichean a’ cleachdadh a’ chànan R (pasgan sgiobalta agus gnìomhan an teaghlaich neo-neònach)
Anns a 'mhòr-chuid de chùisean, nuair a bhios tu ag obair le freagairt a fhuaireadh bho API, no le dàta sam bith eile aig a bheil structar craoibhe iom-fhillte, tha cruthan JSON agus XML agad mu choinneamh.
Tha mòran bhuannachdan aig na cruthan sin: bidh iad a’ stòradh dàta gu math teann agus a’ toirt cothrom dhut dùblachadh fiosrachaidh neo-riatanach a sheachnadh.
Is e ana-cothrom nan cruthan sin cho iom-fhillte 'sa tha an giullachd agus an anailis. Chan urrainnear dàta neo-structaraichte a chleachdadh ann an àireamhachadh agus chan urrainnear fradharc a thogail air.
Tha an artaigil seo na leantainn loidsigeach den fhoillseachadh msgstr "R pacaid tidyr agus na gnìomhan ùra aige pivot_longer agus pivot_wider". Cuidichidh e thu gus structaran dàta neo-structaraichte a thoirt a-steach gu cruth clàr eòlach agus a tha iomchaidh airson mion-sgrùdadh a’ cleachdadh a’ phacaid tidyr, air a ghabhail a-steach ann am meadhan an leabharlainn tidyverse, agus a theaghlach de ghnìomhan unnest_*().
Clàr-innse
Ma tha ùidh agad ann am mion-sgrùdadh dàta, is dòcha gu bheil ùidh agad ann an mo telegram и youtube seanailean. Tha a’ mhòr-chuid den t-susbaint coisrigte don chànan R.
Ceart-cheàrnach(nota bhon eadar-theangair, cha do lorg mi roghainnean eadar-theangachaidh iomchaidh airson an teirm seo, agus mar sin fàgaidh sinn e mar a tha e.) Is e seo am pròiseas airson dàta neo-structaraichte le arrays neadachaidh a thoirt a-steach do chlàr dà-mheudach anns a bheil sreathan agus colbhan eòlach. ANNS tidyr Tha grunn ghnìomhan ann a chuidicheas tu gus colbhan liosta neadachaidh a leudachadh agus an dàta a lughdachadh gu cruth ceart-cheàrnach, clàr:
unnest_longer() a’ gabhail gach eileamaid de liosta nan colbhan agus a’ cruthachadh sreath ùr.
unnest_wider() a’ gabhail gach eileamaid de liosta nan colbhan agus a’ cruthachadh colbh ùr.
unnest_auto() bidh e gu fèin-obrachail a’ dearbhadh dè an gnìomh as fheàrr a chleachdadh unnest_longer() no unnest_wider().
hoist() coltach ri unnest_wider() ach chan eil e a’ taghadh ach na co-phàirtean ainmichte agus leigidh e leat obrachadh le grunn ìrean de neadachadh.
Faodar a’ mhòr-chuid de na duilgheadasan co-cheangailte ri bhith a’ toirt dàta neo-structaraichte le grunn ìrean de neadachadh ann an clàr dà-mheudach fhuasgladh le bhith a’ cothlamadh nan gnìomhan clàraichte le dplyr.
Gus na dòighean sin a nochdadh, cleachdaidh sinn am pasgan repurrrsive, a bheir seachad liostaichean ioma-fhillte, ioma-ìre a thàinig bho API lìn.
Thòisich sinn leinn gh_luchd-cleachdaidh, liosta anns a bheil fiosrachadh mu shia luchd-cleachdaidh GitHub. An toiseach atharraichidh sinn an liosta gh_luchd-cleachdaidh в cìoblach frèam:
users <- tibble( user = gh_users )
Tha e coltach gu bheil seo rud beag mì-thuigseach: carson a bheir thu seachad liosta gh_luchd-cleachdaidh, gu structar dàta nas iom-fhillte? Ach tha buannachd mhòr aig frèam dàta: bidh e a’ cothlamadh grunn vectaran gus am bi a h-uile càil air a leantainn ann an aon nì.
A h-uile eileamaid stuth users tha liosta ainmichte anns a bheil gach eileamaid a’ riochdachadh colbh.
Anns a 'chùis seo, tha clàr againn anns a bheil 30 colbhan, agus cha bhith feum againn air a' mhòr-chuid dhiubh, agus mar sin faodaidh sinn an àite sin unnest_wider() cleachdadh hoist(). hoist() a’ leigeil leinn co-phàirtean taghte a thoirt a-mach a’ cleachdadh an aon cho-chòrdadh ri 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() thoir air falbh na co-phàirtean ainmichte ainmichte bho liosta colbhan -cleachdaidhgus an urrainn dhut beachdachadh hoist() mar a bhith a’ gluasad phàirtean bhon liosta a-staigh de fhrèam ceann-latha chun ìre as àirde.
Stòran Github
Co-thaobhadh liosta gh_repos tòisichidh sinn mar an ceudna le bhith ga thionndadh gu tibble:
An turas seo na h-eileamaidean -cleachdaidh riochdachadh liosta de thasgaidhean leis a’ chleachdaiche seo. Tha gach stòr na sgrùdadh fa leth, mar sin a rèir bun-bheachd dàta grinn (faisg air dàta sgiobalta) bu chòir dhaibh a bhith nan loidhnichean ùra, agus is e sin as coireach gu bheil sinn a’ cleachdadh unnest_longer() chan eil 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
A-nis is urrainn dhuinn a chleachdadh unnest_wider() no 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
Thoir aire don chleachdadh c("owner", "login"): Leigidh seo leinn an luach dàrna ìre fhaighinn bho liosta neadachaidh owner. Is e dòigh eile an liosta gu lèir fhaighinn owner agus an uairsin a 'cleachdadh a' ghnìomh unnest_wider() cuir gach aon d'a chuid ann an colbh :
An àite a bhith a 'smaoineachadh mu bhith a' taghadh an gnìomh ceart unnest_longer() no unnest_wider() faodaidh tu a chleachdadh unnest_auto(). Bidh an gnìomh seo a’ cleachdadh grunn dhòighean heuristic gus an gnìomh as freagarraiche a thaghadh airson an dàta atharrachadh, agus a’ taisbeanadh teachdaireachd mun dòigh a chaidh a thaghadh.
got_chars tha structar co-ionann ri gh_users: Seo seata de liostaichean ainmichte, far a bheil gach eileamaid den liosta a-staigh a’ toirt cunntas air feart air choireigin de charactar Game of Thrones. A' toirt got_chars Airson sealladh a 'bhùird, bidh sinn a' tòiseachadh le bhith a 'cruthachadh frèam ceann-latha, dìreach mar a bha sna h-eisimpleirean roimhe, agus an uairsin tionndaidh gach eileamaid gu colbh air leth:
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>
structar got_chars beagan nas duilghe na gh_users, oir cuid de phàirtean liosta char tha iad fhèin nan liosta, mar thoradh air sin gheibh sinn colbhan - liostaichean:
Tha na gnìomhan eile agad an urra ri amasan an anailis. Is dòcha gu feum thu fiosrachadh a chuir air na loidhnichean airson gach leabhar agus sreath anns a bheil an caractar a’ nochdadh:
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
No is dòcha gu bheil thu airson clàr a chruthachadh a leigeas leat an caractar agus an obair a mhaidseadh:
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
(Thoir fa-near na luachan falamh "" ann an raon title, tha seo mar thoradh air mearachdan a chaidh a dhèanamh nuair a chaidh dàta a chuir a-steach got_chars: gu dearbh, caractaran far nach eil tiotalan leabhraichean is sreath Tbh san raon title feumaidh vectar de dh'fhaid 0 a bhith aige, chan e vectar de dh'fhaid 1 anns a bheil an t-sreang fhalamh.)
Is urrainn dhuinn an eisimpleir gu h-àrd ath-sgrìobhadh a’ cleachdadh a’ ghnìomh unnest_auto(). Tha an dòigh-obrach seo goireasach airson mion-sgrùdadh aon-ùine, ach cha bu chòir earbsa a bhith agad unnest_auto() airson a chleachdadh gu cunbhalach. Is e a’ phuing ma dh’ atharraicheas an structar dàta agad unnest_auto() faodaidh e an uidheamachd cruth-atharrachaidh dàta taghte atharrachadh ma leudaich e colbhan liosta an toiseach gu sreathan a’ cleachdadh unnest_longer(), an uairsin nuair a dh'atharraicheas structar an dàta a tha a 'tighinn a-steach, faodar an loidsig atharrachadh ann am fàbhar unnest_wider(), agus faodaidh cleachdadh an dòigh-obrach seo gu leantainneach leantainn gu mearachdan ris nach robh dùil.
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 le Google
An uairsin, seallaidh sinn ri structar nas iom-fhillte den dàta a gheibhear bho sheirbheis geocoding Google. Tha teisteanasan tasgadan an aghaidh riaghailtean a bhith ag obair le API mapaichean Google, agus mar sin sgrìobhaidh mi pasgan sìmplidh timcheall an API an-toiseach. A tha stèidhichte air a bhith a’ stòradh iuchair API Google Maps ann an caochladair àrainneachd; Mura h-eil an iuchair agad airson a bhith ag obair leis an API Google Maps air a stòradh anns na caochladairean àrainneachd agad, cha tèid na criomagan còd a tha air an taisbeanadh san roinn seo a chuir gu bàs.
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)
}
Tha an liosta a bheir an gnìomh seo air ais gu math toinnte:
Gu fortanach, is urrainn dhuinn fuasgladh fhaighinn air an duilgheadas a thaobh tionndadh an dàta seo gu cruth clàr ceum air cheum a’ cleachdadh gnìomhan tidyr. Gus an obair a dhèanamh beagan nas dùbhlanaiche agus nas reusanta, tòisichidh mi le bhith a’ còdachadh beagan bhailtean:
city <- c ( "Houston" , "LA" , "New York" , "Chicago" , "Springfield" ) city_geo <- purrr::map (city, geocode)
Tionndaidhidh mi an toradh toraidh gu tibble, airson goireasachd, cuiridh mi colbh leis an ainm baile-mòr co-fhreagarrach.
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]>
Anns a 'chiad ìre tha co-phàirtean status и result, leis am faod sinn leudachadh 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
thoir fa-near sin results tha e na liosta ioma-ìre. Tha 1 eileamaid aig a’ mhòr-chuid de bhailtean-mòra (a’ riochdachadh luach sònraichte a rèir an API geocoding), ach tha dhà aig Springfield. Faodaidh sinn an tarraing ann an sreathan fa leth le 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
A-nis tha na h-aon phàirtean aca uile, a dh'fhaodar a dhearbhadh le bhith a 'cleachdadh 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
Lorgaidh sinn co-chomharran domhan-leud is domhan-leud gach baile-mòr le bhith a’ leudachadh an liosta 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>
Agus an uairsin an t-àite far am feum thu leudachadh 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>
A-rithist, unnest_auto() a’ sìmpleachadh an obrachaidh a chaidh a mhìneachadh le cuid de chunnartan a dh’ fhaodadh a bhith air adhbhrachadh le bhith ag atharrachadh structar an dàta a tha a’ tighinn a-steach:
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>
Faodaidh sinn cuideachd dìreach coimhead air a’ chiad sheòladh airson gach baile-mòr:
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>
No cleachd hoist() airson dàibheadh ioma-ìre airson a dhol dìreach thuige 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]>
Luchdaich a-nuas an clàr de Sharla Gelfand
Mu dheireadh, bheir sinn sùil air an structar as iom-fhillte - an discography of Sharla Gelfand. Mar a tha sna h-eisimpleirean gu h-àrd, bidh sinn a’ tòiseachadh le bhith ag atharrachadh an liosta gu frèam dàta aon-colbh, agus an uairsin ga leudachadh gus am bi gach pàirt na cholbh air leth. Bidh mi cuideachd ag atharrachadh a’ cholbh date_added gu cruth ceann-latha agus àm iomchaidh ann an 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
Aig an ìre seo, gheibh sinn fiosrachadh mu cuin a chaidh gach diosc a chur ri clàr Sharla, ach chan eil sinn a’ faicinn dàta sam bith mu na diosgan sin. Gus seo a dhèanamh feumaidh sinn an colbh a leudachadh basic_information:
discs %>% unnest_wider(basic_information)
#> Column name `id` must not be duplicated.
#> Use .name_repair to specify repair.
Gu mì-fhortanach, gheibh sinn mearachd, oir ... taobh a-staigh an liosta basic_information tha colbh den aon ainm ann basic_information. Ma thachras a leithid de mhearachd, gus an adhbhar a cho-dhùnadh gu sgiobalta, faodaidh tu a chleachdadh names_repair = "unique":
Is e an duilgheadas a tha sin basic_information ag ath-aithris a’ cholbh id a tha cuideachd air a stòradh aig an ìre as àirde, gus an urrainn dhuinn dìreach a thoirt air falbh:
discs %>%
hoist(basic_information,
title = "title",
year = "year",
label = list("labels", 1, "name"),
artist = list("artists", 1, "name")
)
#> # A tibble: 155 x 9
#> instance_id date_added title year label artist
#> <int> <dttm> <chr> <int> <chr> <chr>
#> 1 354823933 2019-02-16 17:48:59 Demo 2015 Tobi… Mollot
#> 2 354092601 2019-02-13 14:13:11 Obse… 2013 La V… Una B…
#> 3 354091476 2019-02-13 14:07:23 I 2017 La V… S.H.I…
#> 4 351244906 2019-02-02 11:39:58 Oído… 2017 La V… Rata …
#> 5 351244801 2019-02-02 11:39:37 A Ca… 2015 Kato… Ivy (…
#> 6 351052065 2019-02-01 20:40:53 Tash… 2019 High… Tashme
#> 7 350315345 2019-01-29 15:48:37 Demo 2014 Mind… Desgr…
#> 8 350315103 2019-01-29 15:47:22 Let … 2015 Not … Phant…
#> 9 350314507 2019-01-29 15:44:08 Sub … 2017 Not … Sub S…
#> 10 350314047 2019-01-29 15:41:35 Demo 2017 Pres… Small…
#> # … with 145 more rows, and 3 more variables: basic_information <list>,
#> # id <int>, rating <int>
An seo bidh mi gu sgiobalta a’ faighinn a’ chiad leubail agus ainm neach-ealain a rèir clàr-amais le bhith a’ dàibheadh a-steach don liosta neadachaidh.
Is e dòigh-obrach nas eagraichte bùird fa leth a chruthachadh airson neach-ealain agus leubail:
Faodaidh tu an uairsin a dhol air ais chun an dàta tùsail mar a dh’ fheumar.
co-dhùnadh
Gu cridhe an leabharlainn tidyverse a’ toirt a-steach mòran phasganan feumail aonaichte le feallsanachd giollachd dàta cumanta.
San artaigil seo rinn sinn sgrùdadh air an teaghlach ghnìomhan unnest_*(), a tha ag amas air obrachadh le bhith a' tarraing eileamaidean bho liostaichean neadachaidh. Tha mòran fheartan feumail eile sa phasgan seo a tha ga dhèanamh nas fhasa dàta a thionndadh a rèir a’ bhun-bheachd Dàta sgiobalta.