ထည့်သလင်သထာသသောကော်လံမျာသကို တိုသချဲ့ခဌင်သ - R ဘာသာစကာသ (tidyr ပက်ကေ့ဂျ်နဟင့် unnest မိသာသစုလုပ်ဆောင်ချက်မျာသ) ကို အသုံသပဌုထာသသော စာရင်သမျာသ

ကိစ္စအမျာသစုတလင်၊ API တစ်ခုမဟရရဟိသော တုံ့ပဌန်မဟုတစ်ခု သို့မဟုတ် ရဟုပ်ထလေသသောသစ်ပင်ဖလဲ့စည်သပုံပါရဟိသော အခဌာသဒေတာတစ်ခုခုဖဌင့် လုပ်ဆောင်သောအခါ၊ သင်သည် JSON နဟင့် XML ဖော်မတ်မျာသနဟင့် ရင်ဆိုင်ရနိုင်သည်။

ကဖော်မတ်မျာသသည် အာသသာချက်မျာသစလာရဟိသည်- ၎င်သတို့သည် ဒေတာကို အတော်လေသ ကျစ်ကျစ်လျစ်လျစ် သိမ်သဆည်သထာသပဌီသ မလိုအပ်သော အချက်အလက်မျာသ ထပ်ပလာသခဌင်သကို ရဟောင်ရဟာသနိုင်စေပါသည်။

ကဖော်မတ်မျာသ၏ အာသနည်သချက်မဟာ ၎င်သတို့၏ လုပ်ဆောင်မဟုနဟင့် ခလဲခဌမ်သစိတ်ဖဌာမဟု၏ ရဟုပ်ထလေသမဟုဖဌစ်သည်။ ဖလဲ့စည်သပုံမရဟိသောဒေတာကို တလက်ချက်မဟုမျာသတလင် အသုံသမပဌုနိုင်သည့်အပဌင် ၎င်သတလင် ပုံဖော်ခဌင်သကိုလည်သ တည်ဆောက်၍မရပါ။

ထည့်သလင်သထာသသောကော်လံမျာသကို တိုသချဲ့ခဌင်သ - R ဘာသာစကာသ (tidyr ပက်ကေ့ဂျ်နဟင့် unnest မိသာသစုလုပ်ဆောင်ချက်မျာသ) ကို အသုံသပဌုထာသသော စာရင်သမျာသ

ကဆောင်သပါသသည် ထုတ်ဝေမဟု၏ ကျိုသကဌောင်သဆီလျော်သော အဆက်ဖဌစ်သည်။ "R package tidyr နဟင့် ၎င်သ၏ လုပ်ဆောင်ချက်အသစ် pivot_longer နဟင့် pivot_wider". ၎င်သသည် သင့်အာသ ပက်ကေ့ဂျ်ကို အသုံသပဌု၍ ခလဲခဌမ်သစိတ်ဖဌာမဟုဇယာသပုံစံအတလက် ရင်သနဟီသပဌီသ သင့်လျော်သော ဖလဲ့စည်သပုံမရဟိသော ဒေတာဖလဲ့စည်သပုံမျာသကို ယူဆောင်လာရန် ကူညီပေသပါမည်။ tidyrစာကဌည့်တိုက်၏ အူတိုင်တလင် ပါဝင်သည်။ tidyverseနဟင့်၎င်သ၏လုပ်ငန်သဆောင်တာမျာသ၏မိသာသစု unnest_*().

အကဌောင်သအရာ

ဒေတာခလဲခဌမ်သစိတ်ဖဌာခဌင်သကို စိတ်ဝင်စာသပါက ကျလန်ုပ်ကို စိတ်ဝင်စာသပေမည်။ ကလေသနနျသစာ О youtube က ချန်နယ်မျာသ။ အကဌောင်သအရာအမျာသစုသည် R ဘာသာစကာသအတလက် ရည်ရလယ်သည်။

  1. နိဒါန်သ
  2. GitHub အသုံသပဌုသူမျာသ
  3. Github သိုလဟောင်မဟုမျာသ
  4. Game of Thrones ဇာတ်ကောင်
  5. Google ဖဌင့် Geocoding
  6. Sharla Gelfand ၏ ရဟင်သလင်သချက်
  7. ကောက်ချက်

နိဒါန်သ

စတုဂံပုံ (ဘာသာပဌန်သူ၏မဟတ်ချက်၊ ကအသုံသအနဟုန်သအတလက် လုံလောက်သောဘာသာပဌန်ရလေသချယ်စရာမျာသကို ကျလန်ုပ်မတလေ့သောကဌောင့် ၎င်သကိုထာသခဲ့ပါမည်။) ရင်သနဟီသသောအတန်သမျာသနဟင့် ကော်လံမျာသပါရဟိသော နဟစ်ဖက်မဌင်ဇယာသတစ်ခုသို့ nested arrays မျာသဖဌင့် ဖလဲ့စည်သတည်ဆောက်ပုံမထာသသောဒေတာကို ယူဆောင်ခဌင်သလုပ်ငန်သစဉ်ဖဌစ်သည်။ IN tidyr nested list ကော်လံမျာသကို ချဲ့ထလင်ပဌီသ ဒေတာကို စတုဂံပုံစံ၊ ဇယာသပုံစံသို့ လျဟော့ချရန် ကူညီပေသမည့် လုပ်ဆောင်ချက်မျာသစလာ ရဟိပါသည်။

  • unnest_longer() ကော်လံစာရင်သ၏ဒဌပ်စင်တစ်ခုစီကိုယူကာ အတန်သအသစ်တစ်ခုဖန်တီသပါ။
  • unnest_wider() ကော်လံစာရင်သ၏ဒဌပ်စင်တစ်ခုစီကိုယူ၍ ကော်လံအသစ်တစ်ခုဖန်တီသပါ။
  • unnest_auto() မည်သည့်လုပ်ဆောင်ချက်ကို အသုံသပဌုရန် အကောင်သဆုံသကို အလိုအလျောက် ဆုံသဖဌတ်ပေသသည်။
    unnest_longer() သို့မဟုတ် unnest_wider().
  • hoist() အလာသတူ unnest_wider() သို့သော် သတ်မဟတ်ထာသသော အစိတ်အပိုင်သမျာသကိုသာ ရလေသချယ်ပဌီသ nesting အဆင့်မျာသစလာဖဌင့် လုပ်ဆောင်နိုင်သည်။

နဟစ်ဘက်မဌင်ဇယာသတစ်ခုသို့ အသိုက်အမဌုပ်အဆင့်မျာသစလာဖဌင့် ဖလဲ့စည်သတည်ဆောက်ပုံမထာသသောဒေတာကို ယူဆောင်လာခဌင်သနဟင့်ဆက်စပ်နေသော ပဌဿနာအမျာသစုကို dplyr နဟင့် စာရင်သပဌုစုထာသသောလုပ်ဆောင်ချက်မျာသကို ပေါင်သစပ်ခဌင်သဖဌင့် ဖဌေရဟင်သနိုင်ပါသည်။

ကနည်သပညာမျာသကို သရုပ်ပဌရန်၊ ကျလန်ုပ်တို့သည် အထုပ်ကို အသုံသပဌုပါမည်။ repurrrsiveဝဘ် API တစ်ခုမဟ ဆင်သသက်လာသော ရဟုပ်ထလေသပဌီသ အဆင့်ပေါင်သမျာသစလာ စာရင်သမျာသကို ပံ့ပိုသပေသသော၊

library(tidyr)
library(dplyr)
library(repurrrsive)

GitHub အသုံသပဌုသူမျာသ

အတူစတင် gh_အသုံသပဌုသူမျာသGitHub အသုံသပဌုသူ ခဌောက်ညသနဟင့်ပတ်သက်သော အချက်အလက်မျာသပါရဟိသော စာရင်သ။ အရင်ဆုံသ စာရင်သကို အသလင်ပဌောင်သကဌည့်ရအောင် gh_အသုံသပဌုသူမျာသ в တုတ် ဘောင်-

users <-   tibble( user = gh_users ) 

၎င်သသည် အနည်သငယ် တန်ပဌန်ဟန်ဆောင်ပုံရသည်- အဘယ်ကဌောင့် စာရင်သပေသသနည်သ။ gh_အသုံသပဌုသူမျာသပိုမိုရဟုပ်ထလေသသောဒေတာဖလဲ့စည်သပုံသို့? သို့သော် ဒေတာဘောင်တစ်ခုတလင် ကဌီသမာသသောအာသသာချက်တစ်ခုရဟိသည်- ၎င်သသည် vector အမျာသအပဌာသကိုပေါင်သစပ်ထာသသောကဌောင့် အရာခပ်သိမ်သကို အရာဝတ္ထုတစ်ခုတည်သတလင် ခဌေရာခံနိုင်မည်ဖဌစ်သည်။

အရာဝတ္တုတစ်ခုစီ users အစိတ်အပိုင်သတစ်ခုစီသည် ကော်လံတစ်ခုစီကို ကိုယ်စာသပဌုသည့် အမည်စာရင်သတစ်ခုဖဌစ်သည်။

names(users$user[[1]])
#>  [1] "login"               "id"                  "avatar_url"         
#>  [4] "gravatar_id"         "url"                 "html_url"           
#>  [7] "followers_url"       "following_url"       "gists_url"          
#> [10] "starred_url"         "subscriptions_url"   "organizations_url"  
#> [13] "repos_url"           "events_url"          "received_events_url"
#> [16] "type"                "site_admin"          "name"               
#> [19] "company"             "blog"                "location"           
#> [22] "email"               "hireable"            "bio"                
#> [25] "public_repos"        "public_gists"        "followers"          
#> [28] "following"           "created_at"          "updated_at"

စာရင်သအစိတ်အပိုင်သမျာသကို ကော်လံမျာသအဖဌစ်သို့ ပဌောင်သလဲရန် နည်သလမ်သနဟစ်ခုရဟိသည်။ unnest_wider() အစိတ်အပိုင်သတစ်ခုစီကိုယူပဌီသ ကော်လံအသစ်တစ်ခုကို ဖန်တီသပါ-

users %>% unnest_wider(user)
#> # A tibble: 6 x 30
#>   login     id avatar_url gravatar_id url   html_url followers_url
#>   <chr>  <int> <chr>      <chr>       <chr> <chr>    <chr>        
#> 1 gabo
 6.60e5 https://a
 ""          http
 https:/
 https://api.

#> 2 jenn
 5.99e5 https://a
 ""          http
 https:/
 https://api.

#> 3 jtle
 1.57e6 https://a
 ""          http
 https:/
 https://api.

#> 4 juli
 1.25e7 https://a
 ""          http
 https:/
 https://api.

#> 5 leep
 3.51e6 https://a
 ""          http
 https:/
 https://api.

#> 6 masa
 8.36e6 https://a
 ""          http
 https:/
 https://api.

#> # 
 with 23 more variables: following_url <chr>, gists_url <chr>,
#> #   starred_url <chr>, subscriptions_url <chr>, organizations_url <chr>,
#> #   repos_url <chr>, events_url <chr>, received_events_url <chr>,
#> #   type <chr>, site_admin <lgl>, name <chr>, company <chr>, blog <chr>,
#> #   location <chr>, email <chr>, public_repos <int>, public_gists <int>,
#> #   followers <int>, following <int>, created_at <chr>, updated_at <chr>,
#> #   bio <chr>, hireable <lgl>

ကကိစ္စတလင်၊ ကျလန်ုပ်တို့တလင် ကော်လံ 30 ပါ၀င်သော ဇယာသတစ်ခုရဟိပဌီသ ၎င်သတို့အမျာသစုကို ကျလန်ုပ်တို့ မလိုအပ်ပါ၊ ထို့ကဌောင့် ကျလန်ုပ်တို့သည် အစာသစာသနိုင်ပါသည်။ unnest_wider() သုံသစလဲဖို့ hoist(). hoist() တူညီသော syntax ကို အသုံသပဌု၍ ရလေသချယ်ထာသသော အစိတ်အပိုင်သမျာသကို ထုတ်ယူနိုင်စေပါသည်။ 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() သတ်မဟတ်ထာသသော အမည်ရဟိ အစိတ်အပိုင်သမျာသကို ကော်လံစာရင်သမဟ ဖယ်ရဟာသသည်။ အသုံသပဌုသူကိုဒါကဌောင့်သင်စဉ်သစာသနိုင်ပါတယ်။ hoist() ရက်စလဲဘောင်တစ်ခု၏ အတလင်သပိုင်သစာရင်သမဟ အစိတ်အပိုင်သမျာသကို ၎င်သ၏ထိပ်တန်သအဆင့်သို့ ရလဟေ့သလိုမျိုသ။

Github သိုလဟောင်မဟုမျာသ

စာရင်သ ချိန်ညဟိခဌင်သ။ gh_repos ကျလန်ုပ်တို့သည် ၎င်သကို ပဌောင်သလဲခဌင်သဖဌင့် အလာသတူစတင်ပါသည်။ tibble:

repos <- tibble(repo = gh_repos)
repos
#> # A tibble: 6 x 1
#>   repo       
#>   <list>     
#> 1 <list [30]>
#> 2 <list [30]>
#> 3 <list [30]>
#> 4 <list [26]>
#> 5 <list [30]>
#> 6 <list [30]>

ဒီတစ်ခါတော့ ဒဌပ်စင် အသုံသပဌုသူကို ကအသုံသပဌုသူပိုင်ဆိုင်သော သိုလဟောင်ခန်သမျာသစာရင်သကို ကိုယ်စာသပဌုသည်။ repository တစ်ခုစီသည် သီသခဌာသလေ့လာချက်တစ်ခုဖဌစ်သောကဌောင့် သပ်ရပ်သော data ၏သဘောတရာသအတိုင်သဖဌစ်သည်။ (အနီသစပ်ဆုံသ သပ်ရပ်သော အချက်အလက်) ၎င်သတို့သည် လိုင်သအသစ်မျာသဖဌစ်လာသင့်သောကဌောင့် ကျလန်ုပ်တို့အသုံသပဌုရခဌင်သဖဌစ်ပါသည်။ unnest_longer() ဒါပေမယ့်မဟုတ်ပါဘူသ 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

ယခုကျလန်ုပ်တို့အသုံသပဌုနိုင်ပါသည်။ unnest_wider() သို့မဟုတ် 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

အသုံသပဌုမဟုကိုသတိထာသပါ c("owner", "login"): ၎င်သသည် ကျလန်ုပ်တို့အာသ nested list တစ်ခုမဟ ဒုတိယအဆင့်တန်ဖိုသကို ရရဟိစေပါသည်။ owner. အခဌာသနည်သလမ်သတစ်ခုသည် စာရင်သတစ်ခုလုံသကို ရယူရန်ဖဌစ်သည်။ owner ထို့နောက် function ကိုအသုံသပဌုပါ။ unnest_wider() ၎င်သ၏အစိတ်အပိုင်သတစ်ခုစီကို ကော်လံတစ်ခုထဲသို့ ထည့်ပါ-

repos %>% 
  hoist(repo, owner = "owner") %>% 
  unnest_wider(owner)
#> # A tibble: 176 x 18
#>    login     id avatar_url gravatar_id url   html_url followers_url
#>    <chr>  <int> <chr>      <chr>       <chr> <chr>    <chr>        
#>  1 gabo
 660288 https://a
 ""          http
 https:/
 https://api.

#>  2 gabo
 660288 https://a
 ""          http
 https:/
 https://api.

#>  3 gabo
 660288 https://a
 ""          http
 https:/
 https://api.

#>  4 gabo
 660288 https://a
 ""          http
 https:/
 https://api.

#>  5 gabo
 660288 https://a
 ""          http
 https:/
 https://api.

#>  6 gabo
 660288 https://a
 ""          http
 https:/
 https://api.

#>  7 gabo
 660288 https://a
 ""          http
 https:/
 https://api.

#>  8 gabo
 660288 https://a
 ""          http
 https:/
 https://api.

#>  9 gabo
 660288 https://a
 ""          http
 https:/
 https://api.

#> 10 gabo
 660288 https://a
 ""          http
 https:/
 https://api.

#> # 
 with 166 more rows, and 11 more variables: following_url <chr>,
#> #   gists_url <chr>, starred_url <chr>, subscriptions_url <chr>,
#> #   organizations_url <chr>, repos_url <chr>, events_url <chr>,
#> #   received_events_url <chr>, type <chr>, site_admin <lgl>, repo <list>

မဟန်ကန်တဲ့လုပ်ဆောင်ချက်ကို ရလေသချယ်ဖို့ စဉ်သစာသမယ့်အစာသ unnest_longer() သို့မဟုတ် unnest_wider() သင်သုံသနိုင်သည်။ unnest_auto(). ကလုပ်ဆောင်ချက်သည် ဒေတာကိုပဌောင်သလဲရန်အတလက် အသင့်တော်ဆုံသလုပ်ဆောင်ချက်ကိုရလေသချယ်ရန်အတလက် heuristic နည်သလမ်သမျာသစလာကို အသုံသပဌုပဌီသ ရလေသချယ်ထာသသောနည်သလမ်သအကဌောင်သ မက်ဆေ့ချ်ကို ပဌသပေသပါသည်။

tibble(repo = gh_repos) %>% 
  unnest_auto(repo) %>% 
  unnest_auto(repo)
#> Using `unnest_longer(repo)`; no element has names
#> Using `unnest_wider(repo)`; elements have 68 names in common
#> # A tibble: 176 x 67
#>        id name  full_name owner private html_url description fork  url  
#>     <int> <chr> <chr>     <lis> <lgl>   <chr>    <chr>       <lgl> <chr>
#>  1 6.12e7 after gaborcsa
 <nam
 FALSE   https:/
 Run Code i
 FALSE http

#>  2 4.05e7 argu
 gaborcsa
 <nam
 FALSE   https:/
 Declarativ
 FALSE http

#>  3 3.64e7 ask   gaborcsa
 <nam
 FALSE   https:/
 Friendly C
 FALSE http

#>  4 3.49e7 base
 gaborcsa
 <nam
 FALSE   https:/
 Do we get 
 FALSE http

#>  5 6.16e7 cite
 gaborcsa
 <nam
 FALSE   https:/
 Test R pac
 TRUE  http

#>  6 3.39e7 clis
 gaborcsa
 <nam
 FALSE   https:/
 Unicode sy
 FALSE http

#>  7 3.72e7 cmak
 gaborcsa
 <nam
 FALSE   https:/
 port of cm
 TRUE  http

#>  8 6.80e7 cmark gaborcsa
 <nam
 FALSE   https:/
 CommonMark
 TRUE  http

#>  9 6.32e7 cond
 gaborcsa
 <nam
 FALSE   https:/
 <NA>        TRUE  http

#> 10 2.43e7 cray
 gaborcsa
 <nam
 FALSE   https:/
 R package 
 FALSE http

#> # 
 with 166 more rows, and 58 more variables: forks_url <chr>,
#> #   keys_url <chr>, collaborators_url <chr>, teams_url <chr>,
#> #   hooks_url <chr>, issue_events_url <chr>, events_url <chr>,
#> #   assignees_url <chr>, branches_url <chr>, tags_url <chr>,
#> #   blobs_url <chr>, git_tags_url <chr>, git_refs_url <chr>,
#> #   trees_url <chr>, statuses_url <chr>, languages_url <chr>,
#> #   stargazers_url <chr>, contributors_url <chr>, subscribers_url <chr>,
#> #   subscription_url <chr>, commits_url <chr>, git_commits_url <chr>,
#> #   comments_url <chr>, issue_comment_url <chr>, contents_url <chr>,
#> #   compare_url <chr>, merges_url <chr>, archive_url <chr>,
#> #   downloads_url <chr>, issues_url <chr>, pulls_url <chr>,
#> #   milestones_url <chr>, notifications_url <chr>, labels_url <chr>,
#> #   releases_url <chr>, deployments_url <chr>, created_at <chr>,
#> #   updated_at <chr>, pushed_at <chr>, git_url <chr>, ssh_url <chr>,
#> #   clone_url <chr>, svn_url <chr>, size <int>, stargazers_count <int>,
#> #   watchers_count <int>, language <chr>, has_issues <lgl>,
#> #   has_downloads <lgl>, has_wiki <lgl>, has_pages <lgl>,
#> #   forks_count <int>, open_issues_count <int>, forks <int>,
#> #   open_issues <int>, watchers <int>, default_branch <chr>,
#> #   homepage <chr>

Game of Thrones ဇာတ်ကောင်

got_chars တူညီသောဖလဲ့စည်သပုံရဟိသည်။ gh_users: ၎င်သသည် Game of Thrones ဇာတ်ကောင်၏ အရည်အချင်သအချို့ကို ဖော်ပဌထာသသည့် အတလင်သပိုင်သစာရင်သ၏ အစိတ်အပိုင်သတစ်ခုစီတလင် အမည်ပေသထာသသောစာရင်သမျာသဖဌစ်သည်။ ယူဆောင်လာသည်။ got_chars ဇယာသမဌင်ကလင်သအတလက်၊ ကျလန်ုပ်တို့သည် ယခင်နမူနာမျာသတလင်ကဲ့သို့ ရက်စလဲဘောင်တစ်ခုဖန်တီသခဌင်သဖဌင့် စတင်ပဌီသ ဒဌပ်စင်တစ်ခုစီကို သီသခဌာသကော်လံအဖဌစ်သို့ ပဌောင်သလိုက်ပါ-

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>

ဖလဲ့စည်သပုံမဟာ got_chars ထက် အနည်သငယ် ပိုခက်သည်။ gh_users, ဘာဖဌစ်လို့လဲဆိုတော့ စာရင်သအစိတ်အပိုင်သအချို့ char ၎င်သတို့သည် စာရင်သတစ်ခုဖဌစ်သောကဌောင့် ကျလန်ုပ်တို့သည် တိုင်မျာသရရဟိသည် - စာရင်သမျာသ။

chars2 %>% select_if(is.list)
#> # A tibble: 30 x 7
#>    titles    aliases    allegiances books     povBooks  tvSeries  playedBy 
#>    <list>    <list>     <list>      <list>    <list>    <list>    <list>   
#>  1 <chr [3]> <chr [4]>  <chr [1]>   <chr [3]> <chr [2]> <chr [6]> <chr [1]>
#>  2 <chr [2]> <chr [11]> <chr [1]>   <chr [2]> <chr [4]> <chr [6]> <chr [1]>
#>  3 <chr [2]> <chr [1]>  <chr [1]>   <chr [3]> <chr [2]> <chr [1]> <chr [1]>
#>  4 <chr [1]> <chr [1]>  <???>       <chr [1]> <chr [1]> <chr [1]> <chr [1]>
#>  5 <chr [1]> <chr [1]>  <chr [1]>   <chr [3]> <chr [2]> <chr [2]> <chr [1]>
#>  6 <chr [1]> <chr [1]>  <???>       <chr [2]> <chr [1]> <chr [1]> <chr [1]>
#>  7 <chr [1]> <chr [1]>  <???>       <chr [2]> <chr [1]> <chr [1]> <chr [1]>
#>  8 <chr [1]> <chr [1]>  <chr [1]>   <chr [4]> <chr [1]> <chr [1]> <chr [1]>
#>  9 <chr [5]> <chr [11]> <chr [1]>   <chr [1]> <chr [4]> <chr [6]> <chr [1]>
#> 10 <chr [4]> <chr [5]>  <chr [2]>   <chr [1]> <chr [3]> <chr [5]> <chr [1]>
#> # 
 with 20 more rows

သင်၏ နောက်ထပ်လုပ်ဆောင်မဟုမျာသသည် ခလဲခဌမ်သစိတ်ဖဌာမဟု၏ ပန်သတိုင်မျာသပေါ်တလင် မူတည်သည်။ ဇာတ်ကောင်ပေါ်လာသည့် စာအုပ်နဟင့် စီသရီသတစ်ခုစီအတလက် အချက်အလက်မျာသကို မျဉ်သကဌောင်သမျာသပေါ်တလင် သင်ထည့်ထာသရန် လိုအပ်ကောင်သဖဌစ်နိုင်သည်-

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

ဒါမဟမဟုတ် ဇာတ်ကောင်နဲ့ အလုပ်နဲ့ ကိုက်ညီအောင် လုပ်နိုင်တဲ့ ဇယာသတစ်ခုကို ဖန်တီသချင်တာ ဖဌစ်နိုင်တယ်။

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

(အလလတ်တန်ဖိုသမျာသကို သတိပဌုပါ။ "" လယ်၌ title၎င်သသည် ဒေတာအတလင်သသို့ ဝင်ရောက်သောအခါတလင် ပဌုလုပ်ခဲ့သော အမဟာသမျာသကဌောင့် ဖဌစ်သည်။ got_chars: အမဟန်မဟာ၊ နယ်ပယ်တလင် သက်ဆိုင်ရာ စာအုပ်နဟင့် တီဗီစီသရီသခေါင်သစဉ်မျာသ မရဟိသည့် ဇာတ်ကောင်မျာသ title အလျာသ 0 ၏ vector တစ်ခုရဟိရမည်၊ အရဟည် 1 ၏ vector မဟုတ်ဘဲ string အလလတ်ပါရဟိသည်။)

လုပ်ဆောင်ချက်ကို အသုံသပဌု၍ အထက်ဖော်ပဌပါ ဥပမာကို ကျလန်ုပ်တို့ ပဌန်လည်ရေသသာသနိုင်ပါသည်။ unnest_auto(). ကချဉ်သကပ်မဟုသည် တစ်ကဌိမ်ခလဲခဌမ်သစိတ်ဖဌာမဟုအတလက် အဆင်ပဌေသော်လည်သ သင်အာသကိုသမနေသင့်ပါ။ unnest_auto() ပုံမဟန်အသုံသပဌုရန်။ အဓိကအချက်က သင့်ဒေတာတည်ဆောက်ပုံ ပဌောင်သလဲလာပါက unnest_auto() ကနညသစာရင်သကော်လံမျာသကို အသုံသပဌု၍ အတန်သမျာသအဖဌစ် ချဲ့ထလင်ပါက ရလေသချယ်ထာသသော ဒေတာအသလင်ပဌောင်သသည့် ယန္တရာသကို ပဌောင်သလဲနိုင်သည်။ unnest_longer()ထို့နောက် ဝင်လာသောဒေတာ၏ဖလဲ့စည်သပုံသည် ပဌောင်သလဲသလာသသောအခါတလင်၊ ယုတ္တိဗေဒသဘောအရ ပဌောင်သလဲနိုင်သည်။ unnest_wider()၊ ကနည်သလမ်သကို ဆက်လက်အသုံသပဌုခဌင်သဖဌင့် မမျဟော်လင့်ထာသသော အမဟာသမျာသကို ဖဌစ်ပေါ်စေနိုင်သည်။

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

Google ဖဌင့် Geocoding

ထို့နောက်၊ Google ၏ geocoding ဝန်ဆောင်မဟုမဟရရဟိသော ဒေတာမျာသ၏ ပိုမိုရဟုပ်ထလေသသော ဖလဲ့စည်သပုံကို ကဌည့်ပါမည်။ Caching credentials မျာသသည် Google maps API နဟင့် လုပ်ဆောင်ခဌင်သ၏ စည်သမျဉ်သမျာသကို ဆန့်ကျင်သောကဌောင့် API ပတ်လည်တလင် ရိုသရဟင်သသော wrapper တစ်ခုကို အရင်ရေသပါမည်။ Google Maps API သော့ကို ပတ်၀န်သကျင် ပဌောင်သလဲနိုင်သော ပုံစံတစ်ခုတလင် သိမ်သဆည်သခဌင်သအပေါ် အခဌေခံသည်။ သင့်ပတ်ဝန်သကျင်တလင် သိမ်သဆည်သထာသသည့် Google Maps API နဟင့် လုပ်ဆောင်ရန် သော့မရဟိပါက၊ ကကဏ္ဍတလင် ဖော်ပဌထာသသော ကုဒ်အပိုင်သအစမျာသကို လုပ်ဆောင်မည်မဟုတ်ပါ။

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)
}

ကလုပ်ဆောင်ချက်ကို ပဌန်ပေသသည့်စာရင်သသည် အလလန်ရဟုပ်ထလေသသည်-

houston <- geocode("Houston TX")
str(houston)
#> List of 2
#>  $ results:List of 1
#>   ..$ :List of 5
#>   .. ..$ address_components:List of 4
#>   .. .. ..$ :List of 3
#>   .. .. .. ..$ long_name : chr "Houston"
#>   .. .. .. ..$ short_name: chr "Houston"
#>   .. .. .. ..$ types     :List of 2
#>   .. .. .. .. ..$ : chr "locality"
#>   .. .. .. .. ..$ : chr "political"
#>   .. .. ..$ :List of 3
#>   .. .. .. ..$ long_name : chr "Harris County"
#>   .. .. .. ..$ short_name: chr "Harris County"
#>   .. .. .. ..$ types     :List of 2
#>   .. .. .. .. ..$ : chr "administrative_area_level_2"
#>   .. .. .. .. ..$ : chr "political"
#>   .. .. ..$ :List of 3
#>   .. .. .. ..$ long_name : chr "Texas"
#>   .. .. .. ..$ short_name: chr "TX"
#>   .. .. .. ..$ types     :List of 2
#>   .. .. .. .. ..$ : chr "administrative_area_level_1"
#>   .. .. .. .. ..$ : chr "political"
#>   .. .. ..$ :List of 3
#>   .. .. .. ..$ long_name : chr "United States"
#>   .. .. .. ..$ short_name: chr "US"
#>   .. .. .. ..$ types     :List of 2
#>   .. .. .. .. ..$ : chr "country"
#>   .. .. .. .. ..$ : chr "political"
#>   .. ..$ formatted_address : chr "Houston, TX, USA"
#>   .. ..$ geometry          :List of 4
#>   .. .. ..$ bounds       :List of 2
#>   .. .. .. ..$ northeast:List of 2
#>   .. .. .. .. ..$ lat: num 30.1
#>   .. .. .. .. ..$ lng: num -95
#>   .. .. .. ..$ southwest:List of 2
#>   .. .. .. .. ..$ lat: num 29.5
#>   .. .. .. .. ..$ lng: num -95.8
#>   .. .. ..$ location     :List of 2
#>   .. .. .. ..$ lat: num 29.8
#>   .. .. .. ..$ lng: num -95.4
#>   .. .. ..$ location_type: chr "APPROXIMATE"
#>   .. .. ..$ viewport     :List of 2
#>   .. .. .. ..$ northeast:List of 2
#>   .. .. .. .. ..$ lat: num 30.1
#>   .. .. .. .. ..$ lng: num -95
#>   .. .. .. ..$ southwest:List of 2
#>   .. .. .. .. ..$ lat: num 29.5
#>   .. .. .. .. ..$ lng: num -95.8
#>   .. ..$ place_id          : chr "ChIJAYWNSLS4QIYROwVl894CDco"
#>   .. ..$ types             :List of 2
#>   .. .. ..$ : chr "locality"
#>   .. .. ..$ : chr "political"
#>  $ status : chr "OK"

ကံကောင်သထောက်မစလာ၊ လုပ်ဆောင်ချက်မျာသကို အသုံသပဌု၍ ကဒေတာကို ဇယာသကလက်ပုံစံသို့ အဆင့်ဆင့်ပဌောင်သလဲခဌင်သဆိုင်ရာ ပဌဿနာကို ကျလန်ုပ်တို့ ဖဌေရဟင်သနိုင်ပါသည်။ tidyr. အလုပ်အနည်သငယ်ပို၍ စိန်ခေါ်မဟုနဟင့် လက်တလေ့ကျစေရန်၊ မဌို့အချို့ကို ဘူမိကုဒ်ဖဌင့် စတင်ပါမည်။

  city <-   c ( "Houston" , "LA" , "New York" , "Chicago" , "Springfield" )  city_geo <-   purrr::map (city, geocode) 

ရလာတဲ့ရလဒ်ကို ငါပဌောင်သမယ်။ tibbleအဆင်ပဌေစေရန်အတလက် သက်ဆိုင်ရာမဌို့အမည်ဖဌင့် ကော်လံတစ်ခုကို ထည့်ပေသပါမည်။

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]>

ပထမအဆင့်တလင် အစိတ်အပိုင်သမျာသ ပါဝင်ပါသည်။ status О resultချဲ့ထလင်နိုင်သော၊ 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

မဟတ်ရန် results အဆင့်မျာသစလာရဟိသော စာရင်သတစ်ခုဖဌစ်သည်။ မဌို့အမျာသစုတလင် ဒဌပ်စင် 1 ခုရဟိသည် (geocoding API နဟင့် သက်ဆိုင်သည့် ထူသခဌာသသောတန်ဖိုသကို ကိုယ်စာသပဌုသည်)၊ သို့သော် Springfield တလင် နဟစ်ခုရဟိသည်။ ငါတို့သည်သူတို့ကိုသီသခဌာသလိုင်သမျာသနဟင့်အတူဆလဲယူနိုင်ပါတယ်။ 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

ယခု ၎င်သတို့အာသလုံသတလင် တူညီသော အစိတ်အပိုင်သမျာသကို အသုံသပဌု၍ စစ်ဆေသနိုင်ပဌီဖဌစ်သည်။ 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

စာရင်သကို ချဲ့ထလင်ခဌင်သဖဌင့် မဌို့တစ်ခုစီ၏ လတ္တီတလဒ်နဟင့် လောင်ဂျီတလဒ် သဌဒိနိတ်မျာသကို ရဟာဖလေနိုင်သည်။ 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>

ပဌီသရင် ချဲ့ထလင်ရမယ့် တည်နေရာ 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>

တိုင်ပဌန်တယ်၊ unnest_auto() အဝင်ဒေတာ၏ ဖလဲ့စည်သပုံကို ပဌောင်သလဲခဌင်သကဌောင့် ဖဌစ်ပေါ်လာနိုင်သည့် အန္တရာယ်အချို့ဖဌင့် ဖော်ပဌထာသသော လုပ်ဆောင်ချက်ကို ရိုသရဟင်သစေသည်-

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>

မဌို့တိုင်သအတလက် ပထမဆုံသလိပ်စာကိုလည်သ ကဌည့်နိုင်သည်-

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>

သို့မဟုတ် သုံသပါ။ hoist() Multi-level dive သို့ တိုက်ရိုက်သလာသရန်အတလက် 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]>

Sharla Gelfand ၏ ရဟင်သလင်သချက်

နောက်ဆုံသအနေနဲ့ Sharla Gelfand ရဲ့ အရဟုပ်ထလေသဆုံသဖလဲ့စည်သပုံကို လေ့လာကဌည့်ပါမယ်။ အထက်ဖော်ပဌပါနမူနာမျာသတလင်ကဲ့သို့၊ ကျလန်ုပ်တို့သည် စာရင်သကို ကော်လံတစ်ခုတည်သဒေတာဘောင်အဖဌစ်သို့ ပဌောင်သလဲခဌင်သဖဌင့် စတင်ကာ အစိတ်အပိုင်သတစ်ခုစီသည် သီသခဌာသကော်လံတစ်ခုအဖဌစ်သို့ ချဲ့ထလင်ရန် ၎င်သကို စတင်သည်။ ကော်လံကိုလည်သ အသလင်ပဌောင်သလိုက်တယ်။ date_added 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

ကအဆင့်တလင်၊ Sharla ၏ discography တလင် disc တစ်ခုစီကို ထည့်လိုက်သည့်အခါ အချက်အလက်ကို ကျလန်ုပ်တို့ရရဟိသော်လည်သ ထို discs မျာသနဟင့်ပတ်သက်သော မည်သည့်ဒေတာကိုမျဟ ကျလန်ုပ်တို့မတလေ့ပါ။ ဒါကိုလုပ်ဖို့ ကော်လံကို ချဲ့ရမယ်။ basic_information:

discs %>% unnest_wider(basic_information)
#> Column name `id` must not be duplicated.
#> Use .name_repair to specify repair.

ကံမကောင်သစလာပဲ၊ အမဟာသတစ်ခုလက်ခံရရဟိမည်ဖဌစ်သောကဌောင့်... စာရင်သထဲမဟာ basic_information နာမည်တူကော်လံတစ်ခုရဟိတယ်။ basic_information. ထိုသို့သော အမဟာသတစ်ခု ဖဌစ်ပေါ်လာပါက ၎င်သ၏ အကဌောင်သရင်သကို လျင်မဌန်စလာ ဆုံသဖဌတ်နိုင်ရန် သင်သည် အသုံသပဌုနိုင်သည်။ names_repair = "unique":

discs %>% unnest_wider(basic_information, names_repair = "unique")
#> New names:
#> * id -> id...6
#> * id -> id...14
#> # A tibble: 155 x 15
#>    instance_id date_added          labels  year artists id...6 thumb title
#>          <int> <dttm>              <list> <int> <list>   <int> <chr> <chr>
#>  1   354823933 2019-02-16 17:48:59 <list
  2015 <list 
 7.50e6 http
 Demo 
#>  2   354092601 2019-02-13 14:13:11 <list
  2013 <list 
 4.49e6 http
 Obse

#>  3   354091476 2019-02-13 14:07:23 <list
  2017 <list 
 9.83e6 http
 I    
#>  4   351244906 2019-02-02 11:39:58 <list
  2017 <list 
 9.77e6 http
 Oído

#>  5   351244801 2019-02-02 11:39:37 <list
  2015 <list 
 7.24e6 http
 A Ca

#>  6   351052065 2019-02-01 20:40:53 <list
  2019 <list 
 1.31e7 http
 Tash

#>  7   350315345 2019-01-29 15:48:37 <list
  2014 <list 
 7.11e6 http
 Demo 
#>  8   350315103 2019-01-29 15:47:22 <list
  2015 <list 
 1.05e7 http
 Let 

#>  9   350314507 2019-01-29 15:44:08 <list
  2017 <list 
 1.13e7 ""    Sub 

#> 10   350314047 2019-01-29 15:41:35 <list
  2017 <list 
 1.17e7 http
 Demo 
#> # 
 with 145 more rows, and 7 more variables: formats <list>,
#> #   cover_image <chr>, resource_url <chr>, master_id <int>,
#> #   master_url <chr>, id...14 <int>, rating <int>

ပဌဿနာကအဲဒါပဲ basic_information ထိပ်တန်သအဆင့်တလင် သိမ်သဆည်သထာသသည့် အိုင်ဒီကော်လံကို ပဌန်လုပ်သည့်အတလက် ၎င်သကို ကျလန်ုပ်တို့ ရိုသရဟင်သစလာ ဖယ်ရဟာသနိုင်သည်-

discs %>% 
  select(-id) %>% 
  unnest_wider(basic_information)
#> # A tibble: 155 x 14
#>    instance_id date_added          labels  year artists     id thumb title
#>          <int> <dttm>              <list> <int> <list>   <int> <chr> <chr>
#>  1   354823933 2019-02-16 17:48:59 <list
  2015 <list 
 7.50e6 http
 Demo 
#>  2   354092601 2019-02-13 14:13:11 <list
  2013 <list 
 4.49e6 http
 Obse

#>  3   354091476 2019-02-13 14:07:23 <list
  2017 <list 
 9.83e6 http
 I    
#>  4   351244906 2019-02-02 11:39:58 <list
  2017 <list 
 9.77e6 http
 Oído

#>  5   351244801 2019-02-02 11:39:37 <list
  2015 <list 
 7.24e6 http
 A Ca

#>  6   351052065 2019-02-01 20:40:53 <list
  2019 <list 
 1.31e7 http
 Tash

#>  7   350315345 2019-01-29 15:48:37 <list
  2014 <list 
 7.11e6 http
 Demo 
#>  8   350315103 2019-01-29 15:47:22 <list
  2015 <list 
 1.05e7 http
 Let 

#>  9   350314507 2019-01-29 15:44:08 <list
  2017 <list 
 1.13e7 ""    Sub 

#> 10   350314047 2019-01-29 15:41:35 <list
  2017 <list 
 1.17e7 http
 Demo 
#> # 
 with 145 more rows, and 6 more variables: formats <list>,
#> #   cover_image <chr>, resource_url <chr>, master_id <int>,
#> #   master_url <chr>, rating <int>

တနည်သအာသဖဌင့် သုံသလို့ရတယ်။ hoist():

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>

ကနေရာတလင် ကျလန်ုပ်သည် အသိုက်အဝန်သစာရင်သထဲသို့ တိုသဝင်ခဌင်သဖဌင့် ပထမဆုံသ အညလဟန်သနဟင့် အနုပညာရဟင်အမည်ကို အညလဟန်သဖဌင့် အမဌန်ပဌန်ယူပါသည်။

ပိုမိုစနစ်တကျချဉ်သကပ်မဟုမဟာ အနုပညာရဟင်နဟင့် အညလဟန်သအတလက် သီသခဌာသဇယာသမျာသ ဖန်တီသရန်ဖဌစ်သည်-

discs %>% 
  hoist(basic_information, artist = "artists") %>% 
  select(disc_id = id, artist) %>% 
  unnest_longer(artist) %>% 
  unnest_wider(artist)
#> # A tibble: 167 x 8
#>     disc_id join  name        anv   tracks role  resource_url            id
#>       <int> <chr> <chr>       <chr> <chr>  <chr> <chr>                <int>
#>  1  7496378 ""    Mollot      ""    ""     ""    https://api.discog
 4.62e6
#>  2  4490852 ""    Una BÚstia
 ""    ""     ""    https://api.discog
 3.19e6
#>  3  9827276 ""    S.H.I.T. (
 ""    ""     ""    https://api.discog
 2.77e6
#>  4  9769203 ""    Rata Negra  ""    ""     ""    https://api.discog
 4.28e6
#>  5  7237138 ""    Ivy (18)    ""    ""     ""    https://api.discog
 3.60e6
#>  6 13117042 ""    Tashme      ""    ""     ""    https://api.discog
 5.21e6
#>  7  7113575 ""    Desgraciad
 ""    ""     ""    https://api.discog
 4.45e6
#>  8 10540713 ""    Phantom He
 ""    ""     ""    https://api.discog
 4.27e6
#>  9 11260950 ""    Sub Space 
 ""    ""     ""    https://api.discog
 5.69e6
#> 10 11726853 ""    Small Man 
 ""    ""     ""    https://api.discog
 6.37e6
#> # 
 with 157 more rows

discs %>% 
  hoist(basic_information, format = "formats") %>% 
  select(disc_id = id, format) %>% 
  unnest_longer(format) %>% 
  unnest_wider(format) %>% 
  unnest_longer(descriptions)
#> # A tibble: 280 x 5
#>     disc_id descriptions text  name     qty  
#>       <int> <chr>        <chr> <chr>    <chr>
#>  1  7496378 Numbered     Black Cassette 1    
#>  2  4490852 LP           <NA>  Vinyl    1    
#>  3  9827276 "7""        <NA>  Vinyl    1    
#>  4  9827276 45 RPM       <NA>  Vinyl    1    
#>  5  9827276 EP           <NA>  Vinyl    1    
#>  6  9769203 LP           <NA>  Vinyl    1    
#>  7  9769203 Album        <NA>  Vinyl    1    
#>  8  7237138 "7""        <NA>  Vinyl    1    
#>  9  7237138 45 RPM       <NA>  Vinyl    1    
#> 10 13117042 "7""        <NA>  Vinyl    1    
#> # 
 with 270 more rows

ထို့နောက် လိုအပ်သလို ၎င်သတို့ကို မူရင်သဒေတာအတလဲသို့ ပဌန်လည်ရောက်ရဟိနိုင်ပါသည်။

ကောက်ချက်

စာကဌည့်​တိုက်​ရဲ့အ​ခဌေအ​နေကို tidyverse ဘုံဒေတာလုပ်ဆောင်ခဌင်သခံယူချက်ဖဌင့် ပေါင်သစပ်ထာသသော အသုံသဝင်သော ပက်ကေ့ဂျ်မျာသစလာ ပါဝင်သည်။

ကဆောင်သပါသတလင် ကျလန်ုပ်တို့သည် လုပ်ဆောင်ချက်မျာသ၏ မိသာသစုကို ဆန်သစစ်ထာသသည်။ unnest_*()nested lists မဟ အစိတ်အပိုင်သမျာသကို ထုတ်ယူခဌင်သဖဌင့် လုပ်ဆောင်ရန် ရည်ရလယ်သည်။ ကပက်ကေ့ဂျ်တလင် အယူအဆအရ ဒေတာကို ပိုမိုလလယ်ကူစလာ ပဌောင်သနိုင်စေသည့် အခဌာသအသုံသဝင်သော အင်္ဂါရပ်မျာသစလာ ပါရဟိသည်။ သပ်ရပ်သောဒေတာ.

source: www.habr.com

မဟတ်ချက် Add