Π ΠΏΠΎΠ²Π΅ΡΠ΅ΡΠΎ ΡΠ»ΡΡΠ°ΠΈ, ΠΊΠΎΠ³Π°ΡΠΎ ΡΠ°Π±ΠΎΡΠΈΡΠ΅ Ρ ΠΎΡΠ³ΠΎΠ²ΠΎΡΠΈΡΠ΅, ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΈ ΠΎΡ API ΠΈΠ»ΠΈ Ρ Π΄ΡΡΠ³ΠΈ Π΄Π°Π½Π½ΠΈ Ρ ΡΠ»ΠΎΠΆΠ½Π° Π΄ΡΡΠ²ΠΎΠ²ΠΈΠ΄Π½Π° ΡΡΡΡΠΊΡΡΡΠ°, ΡΠ΅ ΡΠ΅ ΡΠ±Π»ΡΡΠΊΠ°ΡΠ΅ Ρ ΡΠΎΡΠΌΠ°ΡΠΈ JSON ΠΈ XML.
Π’Π΅Π·ΠΈ ΡΠΎΡΠΌΠ°ΡΠΈ ΠΈΠΌΠ°Ρ ΠΌΠ½ΠΎΠ³ΠΎ ΠΏΡΠ΅Π΄ΠΈΠΌΡΡΠ²Π°: ΡΠ΅ ΡΡΡ ΡΠ°Π½ΡΠ²Π°Ρ Π΄Π°Π½Π½ΠΈ ΡΡΠ°Π²Π½ΠΈΡΠ΅Π»Π½ΠΎ ΠΊΠΎΠΌΠΏΠ°ΠΊΡΠ½ΠΎ ΠΈ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ²Π°Ρ Π΄Π° ΡΠ΅ ΠΈΠ·Π±Π΅Π³Π½Π΅ ΠΈΠ·Π»ΠΈΡΠ½ΠΎΡΠΎ Π΄ΡΠ±Π»ΠΈΡΠ°Π½Π΅ Π½Π° ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ.
ΠΠ΅Π΄ΠΎΡΡΠ°ΡΡΠΊ Π½Π° ΡΠ΅Π·ΠΈ ΡΠΎΡΠΌΠ°ΡΠΈ Π΅ ΡΠ»ΠΎΠΆΠ½ΠΎΡΡΡΠ° ΠΈΠΌ ΠΏΡΠΈ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠ° ΠΈ Π°Π½Π°Π»ΠΈΠ·. ΠΠ΅ΡΡΡΡΠΊΡΡΡΠΈΡΠ°Π½ΠΈΡΠ΅ Π΄Π°Π½Π½ΠΈ Π½Π΅ ΠΌΠΎΠ³Π°Ρ Π΄Π° ΡΠ΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ Π² ΠΈΠ·ΡΠΈΡΠ»Π΅Π½ΠΈΡ ΠΈ Π½Π΅ Π΅ Π²ΡΠ·ΠΌΠΎΠΆΠ½ΠΎ Π΄Π° ΡΠ΅ ΠΈΠ·Π³ΡΠ°Π΄ΡΡ Π²ΠΈΠ·ΡΠ°Π»ΠΈΠ·Π°ΡΠΈΠΈ Π½Π° ΡΡΡ Π½Π° Π±Π°Π·Π°.

Π’Π°Π·ΠΈ ΡΡΠ°ΡΠΈΡ Π΅ Π»ΠΎΠ³ΠΈΡΠ½ΠΎ ΠΏΡΠΎΠ΄ΡΠ»ΠΆΠ΅Π½ΠΈΠ΅ Π½Π° ΠΏΡΠ±Π»ΠΈΠΊΠ°ΡΠΈΡΡΠ° . Π’Ρ ΡΠ΅ Π²ΠΈ ΠΏΠΎΠΌΠΎΠ³Π½Π΅ Π΄Π° ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΡΠ²Π°ΡΠ΅ Π½Π΅ΡΡΡΡΠΊΡΡΡΠΈΡΠ°Π½ΠΈΡΠ΅ ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΈΠΈ Π½Π° Π΄Π°Π½Π½ΠΈ Π² ΠΏΠΎΠ·Π½Π°Ρ, ΡΠ΄ΠΎΠ±Π΅Π½ Π·Π° Π°Π½Π°Π»ΠΈΠ· ΡΠ°Π±Π»ΠΈΡΠ΅Π½ Π²ΠΈΠ΄ Ρ ΠΏΠΎΠΌΠΎΡΡΠ° Π½Π° ΠΏΠ°ΠΊΠ΅ΡΠ° tidyr, Π²Ρ
ΠΎΠ΄ΡΡ Π² ΠΎΡΠ½ΠΎΠ²Π°ΡΠ° Π½Π° Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ°ΡΠ° tidyverse, ΠΈ ΡΡΠ½ΠΊΡΠΈΠΈΡΠ΅ ΠΎΡ ΡΠ΅ΠΌΠ΅ΠΉΡΡΠ²ΠΎΡΠΎ unnest_*().
Π‘ΡΠ΄ΡΡΠΆΠ°Π½ΠΈΠ΅
ΠΠΊΠΎ ΡΠ΅ ΠΈΠ½ΡΠ΅ΡΠ΅ΡΡΠ²Π°ΡΠ΅ ΠΎΡ Π°Π½Π°Π»ΠΈΠ· Π½Π° Π΄Π°Π½Π½ΠΈ, ΠΌΠΎΠ³Π°Ρ Π΄Π° Π²ΠΈ Π±ΡΠ΄Π°Ρ ΠΈΠ½ΡΠ΅ΡΠ΅ΡΠ½ΠΈ ΠΌΠΎΠΈΡΠ΅ ΠΈ ΠΊΠ°Π½Π°Π»ΠΈ. ΠΠΎΠ»ΡΠΌΠ°ΡΠ° ΡΠ°ΡΡ ΠΎΡ ΡΡΠ΄ΡΡΠΆΠ°Π½ΠΈΠ΅ΡΠΎ ΠΈΠΌ Π΅ ΠΏΠΎΡΠ²Π΅ΡΠ΅Π½Π° Π½Π° Π΅Π·ΠΈΠΊΠ° R.
ΠΡΠ²Π΅Π΄Π΅Π½ΠΈΠ΅
Rectangling (ΠΏΡΠΈΠΌ. Π½Π° ΠΏΡΠ΅Π²ΠΎΠ΄Π°ΡΠ°, Π½Π΅ Π½Π°ΠΌΠ΅ΡΠΈΡ
Π°Π΄Π΅ΠΊΠ²Π°ΡΠ½ΠΈ Π²Π°ΡΠΈΠ°Π½ΡΠΈ Π·Π° ΠΏΡΠ΅Π²ΠΎΠ΄ Π½Π° ΡΠΎΠ·ΠΈ ΡΠ΅ΡΠΌΠΈΠ½, Π·Π°ΡΠΎΠ²Π° Π³ΠΎ ΠΎΡΡΠ°Π²ΡΠΌΠ΅ ΠΊΠ°ΠΊΡΠΎ Π΅.) β ΡΠΎΠ²Π° Π΅ ΠΏΡΠΎΡΠ΅Ρ Π½Π° ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΡΠ²Π°Π½Π΅ Π½Π° Π½Π΅ΡΡΡΡΠΊΡΡΡΠΈΡΠ°Π½ΠΈ Π΄Π°Π½Π½ΠΈ Ρ Π²Π»ΠΎΠΆΠ΅Π½ΠΈ ΠΌΠ°ΡΠΈΠ²ΠΈ Π² Π΄Π²ΡΠΌΠ΅ΡΠ½Π° ΡΠ°Π±Π»ΠΈΡΠ°, ΡΡΡΡΠΎΡΡΠ° ΡΠ΅ ΠΎΡ ΠΏΠΎΠ·Π½Π°ΡΠΈΡΠ΅ Π½ΠΈ ΡΠ΅Π΄ΠΎΠ²Π΅ ΠΈ ΠΊΠΎΠ»ΠΎΠ½ΠΈ. Π tidyr ΠΈΠΌΠ° Π½ΡΠΊΠΎΠ»ΠΊΠΎ ΡΡΠ½ΠΊΡΠΈΠΈ, ΠΊΠΎΠΈΡΠΎ ΡΠ΅ Π²ΠΈ ΠΏΠΎΠΌΠΎΠ³Π½Π°Ρ Π΄Π° ΡΠ°Π·ΡΠΈΡΠΈΡΠ΅ Π²Π»ΠΎΠΆΠ΅Π½ΠΈΡΠ΅ ΠΊΠΎΠ»ΠΎΠ½ΠΈ-ΡΠΏΠΈΡΡΡΠΈ ΠΈ Π΄Π° ΠΏΡΠΈΠ²Π΅Π΄Π΅ΡΠ΅ Π΄Π°Π½Π½ΠΈΡΠ΅ Π² ΠΏΡΠ°Π²ΠΎΡΠ³ΡΠ»Π½Π°, ΡΠ°Π±Π»ΠΈΡΠ½Π° ΡΠΎΡΠΌΠ°:
unnest_longer()Π²Π·Π΅ΠΌΠ° Π²ΡΠ΅ΠΊΠΈ Π΅Π»Π΅ΠΌΠ΅Π½Ρ ΠΎΡ ΡΠΏΠΈΡΡΠΊΠ°-ΠΊΠΎΠ»ΠΎΠ½Π° ΠΈ ΡΡΠ·Π΄Π°Π²Π° Π½ΠΎΠ² ΡΠ΅Π΄.unnest_wider()Π²Π·Π΅ΠΌΠ° Π²ΡΠ΅ΠΊΠΈ Π΅Π»Π΅ΠΌΠ΅Π½Ρ ΠΎΡ ΡΠΏΠΈΡΡΠΊΠ°-ΠΊΠΎΠ»ΠΎΠ½Π° ΠΈ ΡΡΠ·Π΄Π°Π²Π° Π½ΠΎΠ²Π° ΠΊΠΎΠ»ΠΎΠ½Π°.unnest_auto()Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ½ΠΎ ΠΎΠΏΡΠ΅Π΄Π΅Π»Ρ ΠΊΠΎΡ ΠΎΡ ΡΡΠ½ΠΊΡΠΈΠΈΡΠ΅ Π΅ Π½Π°ΠΉ-ΠΏΠΎΠ΄Ρ ΠΎΠ΄ΡΡΠ° Π·Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅
unnest_longer()ΠΈΠ»ΠΈunnest_wider().hoist()Π΅ ΠΏΠΎΠ΄ΠΎΠ±Π½Π° Π½Π°unnest_wider()Π½ΠΎ ΡΠ΅Π»Π΅ΠΊΡΠΈΡΠ° ΡΠ°ΠΌΠΎ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΡΠ΅ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠΈ ΠΈ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ²Π° ΡΠ°Π±ΠΎΡΠ° Ρ Π½ΡΠΊΠΎΠ»ΠΊΠΎ Π½ΠΈΠ²Π° Π½Π° Π²Π»ΠΎΠΆΠ΅Π½ΠΎΡΡ.
ΠΠΎΠ²Π΅ΡΠ΅ΡΠΎ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠΈ, ΡΠ²ΡΡΠ·Π°Π½ΠΈ Ρ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΡΠ²Π°Π½Π΅ΡΠΎ Π½Π° Π½Π΅ΡΡΡΡΠΊΡΡΡΠΈΡΠ°Π½ΠΈ Π΄Π°Π½Π½ΠΈ Ρ Π½ΡΠΊΠΎΠ»ΠΊΠΎ Π½ΠΈΠ²Π° Π½Π° Π²Π»ΠΎΠΆΠ΅Π½ΠΎΡΡ Π² Π΄Π²ΡΠΌΠ΅ΡΠ½Π° ΡΠ°Π±Π»ΠΈΡΠ°, ΠΌΠΎΠΆΠ΅ Π΄Π° Π±ΡΠ΄Π°Ρ ΡΠ΅ΡΠ΅Π½ΠΈ, ΠΊΠ°ΡΠΎ ΡΠ΅ ΠΊΠΎΠΌΠ±ΠΈΠ½ΠΈΡΠ°Ρ ΡΠΏΠΎΠΌΠ΅Π½Π°ΡΠΈΡΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ Ρ dplyr.
ΠΠ° Π΄Π΅ΠΌΠΎΠ½ΡΡΡΠ°ΡΠΈΡ Π½Π° ΡΠ΅Π·ΠΈ ΡΠ΅Ρ
Π½ΠΈΠΊΠΈ, ΡΠ΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΌΠ΅ ΠΏΠ°ΠΊΠ΅ΡΠ° repurrrsive, ΠΊΠΎΠΉΡΠΎ ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Ρ Π½ΡΠΊΠΎΠ»ΠΊΠΎ ΡΠ»ΠΎΠΆΠ½ΠΈ, ΠΌΠ½ΠΎΠ³ΠΎΡΡΠ΅ΠΏΠ΅Π½Π½ΠΈ ΡΠΏΠΈΡΡΠΊΠ°, ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΈ ΠΎΡ ΡΠ΅Π±-API.
library(tidyr)
library(dplyr)
library(repurrrsive)ΠΠΎΡΡΠ΅Π±ΠΈΡΠ΅Π»ΠΈ Π½Π° GitHub
ΠΠ΅ΠΊΠ° Π·Π°ΠΏΠΎΡΠ½Π΅ΠΌ Ρ gh_users, ΡΠΏΠΈΡΡΠΊ, ΠΊΠΎΠΉΡΠΎ ΡΡΠ΄ΡΡΠΆΠ° ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ Π·Π° ΡΠ΅ΡΡ ΠΏΠΎΡΡΠ΅Π±ΠΈΡΠ΅Π»ΠΈ Π½Π° GitHub. ΠΡΡΠ²ΠΎ ΡΠ΅ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΡΠ²Π°ΠΌΠ΅ ΡΠΏΠΈΡΡΠΊΠ° gh_users Π² tibble ΡΠ°ΠΌΠΊΠ°:
users <- tibble( user = gh_users ) Π’ΠΎΠ²Π° ΠΈΠ·Π³Π»Π΅ΠΆΠ΄Π° ΠΌΠ°Π»ΠΊΠΎ Π½Π΅ΡΡΠ½ΠΎ: Π·Π°ΡΠΎ Π΄Π° ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΡΠ²Π°ΠΌΠ΅ ΡΠΏΠΈΡΡΠΊ gh_users, Π² ΠΏΠΎ-ΡΠ»ΠΎΠΆΠ½Π° ΡΡΡΡΠΊΡΡΡΠ° ΠΎΡ Π΄Π°Π½Π½ΠΈ? ΠΠΎ Π΄Π°ΡΠ° ΡΡΠ΅ΠΉΠΌΡΡ ΠΈΠΌΠ° Π³ΠΎΠ»ΡΠΌΠΎ ΠΏΡΠ΅Π΄ΠΈΠΌΡΡΠ²ΠΎ: ΡΠΎΠΉ ΠΊΠΎΠΌΠ±ΠΈΠ½ΠΈΡΠ° Π½ΡΠΊΠΎΠ»ΠΊΠΎ Π²Π΅ΠΊΡΠΎΡΠ°, ΡΠ°ΠΊΠ° ΡΠ΅ Π²ΡΠΈΡΠΊΠΎ Π΅ ΠΏΡΠΎΡΠ»Π΅Π΄ΠΈΠΌΠΎ Π² Π΅Π΄ΠΈΠ½ ΠΎΠ±Π΅ΠΊΡ.
ΠΡΠ΅ΠΊΠΈ Π΅Π»Π΅ΠΌΠ΅Π½Ρ Π½Π° ΠΎΠ±Π΅ΠΊΡΠ° 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
#>
#> 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.β¦
#> # β¦ Ρ 23 Π΄ΠΎΠΏΡΠ»Π½ΠΈΡΠ΅Π»Π½ΠΈ ΠΏΡΠΎΠΌΠ΅Π½Π»ΠΈΠ²ΠΈ: following_url , gists_url ,
#> # starred_url , subscriptions_url , organizations_url ,
#> # repos_url , events_url , received_events_url ,
#> # type , site_admin , name , company , blog ,
#> # location , email , public_repos , public_gists ,
#> # followers , following , created_at , updated_at ,
#> # bio , hireableΠ ΡΠΎΠ·ΠΈ ΡΠ»ΡΡΠ°ΠΉ ΠΏΠΎΠ»ΡΡΠ°Π²Π°ΠΌΠ΅ ΡΠ°Π±Π»ΠΈΡΠ°, ΡΡΡΡΠΎΡΡΠ° ΡΠ΅ ΠΎΡ 30 ΠΊΠΎΠ»ΠΎΠ½ΠΈ, ΠΈ ΠΏΠΎΠ²Π΅ΡΠ΅ΡΠΎ ΠΎΡ ΡΡΡ
Π½Π΅ ΡΠ° Π½ΠΈ Π½ΡΠΆΠ½ΠΈ, Π·Π°ΡΠΎΠ²Π° Π²ΠΌΠ΅ΡΡΠΎ unnest_wider() ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΌΠ΅ hoist(). hoist() Π½ΠΈ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ²Π° Π΄Π° ΠΈΠ·Π²Π»Π΅ΠΊΠ΅ΠΌ ΠΈΠ·Π±ΡΠ°Π½ΠΈΡΠ΅ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠΈ, ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΉΠΊΠΈ ΡΡΡΠΈΡ ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡ, ΠΊΠΎΠΉΡΠΎ ΠΈ purrr::pluck():
ΠΏΠΎΡΡΠ΅Π±ΠΈΡΠ΅Π»ΠΈ %>% 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]>Π’ΠΎΠ·ΠΈ ΠΏΡΡ Π΅Π»Π΅ΠΌΠ΅Π½ΡΠΈΡΠ΅ ΠΏΠΎΡΡΠ΅Π±ΠΈΡΠ΅Π» ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΠ²Π°Ρ ΡΠΏΠΈΡΡΠΊ Π½Π° ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΠΈΡΠ΅, ΠΏΡΠΈΠ½Π°Π΄Π»Π΅ΠΆΠ°ΡΠΈ Π½Π° ΡΠΎΠ·ΠΈ ΠΏΠΎΡΡΠ΅Π±ΠΈΡΠ΅Π». ΠΡΠ΅ΠΊΠΈ ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΠΉ Π΅ ΠΎΡΠ΄Π΅Π»Π΅Π½ Π·Π°ΠΏΠΈΡ, ΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»Π½ΠΎ ΡΠΏΠΎΡΠ΅Π΄ ΠΊΠΎΠ½ΡΠ΅ΠΏΡΠΈΡΡΠ° Π·Π° ΠΏΠΎΠ΄ΡΠ΅Π΄Π΅Π½ΠΈ Π΄Π°Π½Π½ΠΈ (Π²ΠΆ. ΠΏΠΎΠ΄ΡΠ΅Π΄Π΅Π½ΠΈ Π΄Π°Π½Π½ΠΈ) ΡΠ΅ ΡΡΡΠ±Π²Π° Π΄Π° ΡΡΠ°Π½Π°Ρ Π½ΠΎΠ²ΠΈ ΡΠ΅Π΄ΠΎΠ²Π΅, ΠΏΠΎΡΠ°Π΄ΠΈ ΠΊΠΎΠ΅ΡΠΎ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΌΠ΅ 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]>
#> # β¦ Ρ ΠΎΡΠ΅ 166 ΡΠ΅Π΄Π°Π‘Π΅Π³Π° ΠΌΠΎΠΆΠ΅ΠΌ Π΄Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΌΠ΅ 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]>
#> # β¦ Ρ ΠΎΡΠ΅ 166 ΡΠ΅Π΄Π°ΠΠ±ΡΡΠ½Π΅ΡΠ΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π½Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ΡΠΎ Π½Π° c("owner", "login"): ΡΠΎΠ²Π° Π½ΠΈ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ²Π° Π΄Π° ΠΏΠΎΠ»ΡΡΠΈΠΌ ΡΡΠΎΠΉΠ½ΠΎΡΡΡΠ° Π½Π° Π²ΡΠΎΡΠΎ Π½ΠΈΠ²ΠΎ ΠΎΡ Π²Π»ΠΎΠΆΠ΅Π½ΠΈΡ ΡΠΏΠΈΡΡΠΊ ΡΠΎΠ±ΡΡΠ²Π΅Π½ΠΈΠΊ. ΠΠ»ΡΠ΅ΡΠ½Π°ΡΠΈΠ²Π½ΠΈΡΡ ΠΏΠΎΠ΄Ρ
ΠΎΠ΄ Π΅ Π΄Π° ΡΠ΅ ΠΏΠΎΠ»ΡΡΠΈ ΡΠ΅Π»ΠΈΡΡ ΡΠΏΠΈΡΡΠΊ ΡΠΎΠ±ΡΡΠ²Π΅Π½ΠΈΠΊ ΠΈ ΡΠ»Π΅Π΄ ΡΠΎΠ²Π° Ρ ΠΏΠΎΠΌΠΎΡΡΠ° Π½Π° ΡΡΠ½ΠΊΡΠΈΡΡΠ° 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
#>
#> 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.β¦
#> # β¦ Ρ ΠΎΡΠ΅ 166 ΡΠ΅Π΄Π°, ΠΈ 11 Π΄ΠΎΠΏΡΠ»Π½ΠΈΡΠ΅Π»Π½ΠΈ ΠΏΡΠΎΠΌΠ΅Π½Π»ΠΈΠ²ΠΈ: following_url ,
#> # gists_url , starred_url , subscriptions_url ,
#> # organizations_url , repos_url , events_url ,
#> # received_events_url , type , site_admin , repoΠΠΌΠ΅ΡΡΠΎ Π΄Π° ΡΠ΅ ΡΡΠ΄ΠΈΡΠ΅ ΠΊΠ°ΠΊ Π΄Π° ΠΈΠ·Π±Π΅ΡΠ΅ΡΠ΅ Π½Π΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌΠ°ΡΠ° ΡΡΠ½ΠΊΡΠΈΡ unnest_longer() ΠΈΠ»ΠΈ unnest_wider() ΠΌΠΎΠΆΠ΅ΡΠ΅ Π΄Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΡΠ΅ unnest_auto(). Π’Π°Π·ΠΈ ΡΡΠ½ΠΊΡΠΈΡ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° Π½ΡΠΊΠΎΠ»ΠΊΠΎ Ρ
Π΅Π²ΡΠΈΡΡΠΈΡΠ½ΠΈ ΠΌΠ΅ΡΠΎΠ΄Π°, Π·Π° Π΄Π° Π½Π°ΠΌΠ΅ΡΠΈ Π½Π°ΠΉ-ΠΏΠΎΠ΄Ρ
ΠΎΠ΄ΡΡΠ°ΡΠ° ΡΡΠ½ΠΊΡΠΈΡ Π·Π° ΡΡΠ°Π½ΡΡΠΎΡΠΌΠΈΡΠ°Π½Π΅ Π½Π° Π΄Π°Π½Π½ΠΈ ΠΈ ΠΈΠ·Π²Π΅ΠΆΠ΄Π° ΡΡΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ Π·Π° ΠΈΠ·Π±ΡΠ°Π½ΠΈΡ ΠΌΠ΅ΡΠΎΠ΄.
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
#>
#> 1 6.12e7 after gaborcsaβ¦ 2 4.05e7 arguβ¦ gaborcsaβ¦ 3 3.64e7 ask gaborcsaβ¦ 4 3.49e7 baseβ¦ gaborcsaβ¦ 5 6.16e7 citeβ¦ gaborcsaβ¦ 6 3.39e7 clisβ¦ gaborcsaβ¦ 7 3.72e7 cmakβ¦ gaborcsaβ¦ 8 6.80e7 cmark gaborcsaβ¦ 9 6.32e7 condβ¦ gaborcsaβ¦ <namβ¦ FALSE https:/β¦ TRUE httpβ¦
#> 10 2.43e7 cray⦠gaborcsa⦠# ⦠with 166 more rows, and 58 more variables: forks_url ,
#> # keys_url , collaborators_url , teams_url ,
#> # hooks_url , issue_events_url , events_url ,
#> # assignees_url , branches_url , tags_url ,
#> # blobs_url , git_tags_url , git_refs_url ,
#> # trees_url , statuses_url , languages_url ,
#> # stargazers_url , contributors_url , subscribers_url ,
#> # subscription_url , commits_url , git_commits_url ,
#> # comments_url , issue_comment_url , contents_url ,
#> # compare_url , merges_url , archive_url ,
#> # downloads_url , issues_url , pulls_url ,
#> # milestones_url , notifications_url , labels_url ,
#> # releases_url , deployments_url , created_at ,
#> # updated_at , pushed_at , git_url , ssh_url ,
#> # clone_url , svn_url , size , stargazers_count ,
#> # watchers_count , language , has_issues ,
#> # has_downloads , has_wiki , has_pages ,
#> # forks_count , open_issues_count , forks ,
#> # open_issues , watchers , default_branch ,
#> # homepageΠΠ΅ΡΡΠΎΠ½Π°ΠΆΠΈ Π½Π° ΠΠ³ΡΠ° Π½Π° ΡΡΠΎΠ½ΠΎΠ²Π΅
got_chars ΠΈΠΌΠ° ΠΈΠ΄Π΅Π½ΡΠΈΡΠ½Π° ΡΡΡΡΠΊΡΡΡΠ° Ρ gh_users: ΡΠΎΠ²Π° Π΅ Π½Π°Π±ΠΎΡ ΠΎΡ ΠΈΠΌΠ΅Π½ΡΠ²Π°Π½ΠΈ ΡΠΏΠΈΡΡΡΠΈ, ΠΊΡΠ΄Π΅ΡΠΎ Π²ΡΠ΅ΠΊΠΈ Π΅Π»Π΅ΠΌΠ΅Π½Ρ ΠΎΡ Π²ΡΡΡΠ΅ΡΠ½ΠΈΡ ΡΠΏΠΈΡΡΠΊ ΠΎΠΏΠΈΡΠ²Π° ΠΈΠ·Π²Π΅ΡΡΠ΅Π½ Π°ΡΡΠΈΠ±ΡΡ Π½Π° Π³Π΅ΡΠΎΡ ΠΎΡ ΠΠ³ΡΠ° Π½Π° Π’ΡΠΎΠ½ΠΎΠ²Π΅. ΠΡΠ΅Π²Π΅ΠΆΠ΄Π°Π½Π΅ΡΠΎ got_chars Π² ΡΠ°Π±Π»ΠΈΡΠ΅Π½ Π²ΠΈΠ΄ Π·Π°ΠΏΠΎΡΠ²Π°ΠΌΠ΅ Ρ ΡΡΠ·Π΄Π°Π²Π°Π½Π΅ Π½Π° Π΄Π°ΡΠ° ΡΡΠ΅ΠΉΠΌ, ΡΡΡΠΎ ΠΊΠ°ΠΊΡΠΎ ΠΈ Π² ΠΏΡΠ΅Π΄ΠΈΡΠ½ΠΈΡΠ΅ ΠΏΡΠΈΠΌΠ΅ΡΠΈ, Π° ΡΠ»Π΅Π΄ ΡΠΎΠ²Π° ΡΠ΅ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΡΠ²Π°ΠΌΠ΅ Π²ΡΠ΅ΠΊΠΈ Π΅Π»Π΅ΠΌΠ΅Π½Ρ Π² ΠΎΡΠ΄Π΅Π»Π΅Π½ ΡΡΡΠ»Π±:
ΡΠΈΠΌΠ²ΠΎΠ»ΠΈ # A tibble: 30 x 1
#> ΡΠΈΠΌΠ²ΠΎΠ»
#>
#> 1
#> 2
#> 3
#> 4
#> 5
#> 6
#> 7
#> 8
#> 9
#> 10
#> # β¦ Ρ ΠΎΡΠ΅ 20 ΡΠ΅Π΄Π°
ΡΠΈΠΌΠ²ΠΎΠ»ΠΈ2 % unnest_wider(symbol)
ΡΠΈΠΌΠ²ΠΎΠ»ΠΈ2
#> # A tibble: 30 x 18
#> url id name gender culture born died alive titles aliases father
#> <int>
#> 1 httpβ¦ 1022 Theoβ¦ Male Ironboβ¦ Π 2β¦ "" TRUE <chr β¦ 2 httpβ¦ 1052 Tyriβ¦ Male "" Π 2β¦ "" TRUE <chr β¦ 3 httpβ¦ 1074 Victβ¦ Male Ironboβ¦ Π 2β¦ "" TRUE <chr β¦ 4 httpβ¦ 1109 Will Male "" "" Π 2β¦ FALSE <chr β¦ 5 httpβ¦ 1166 Areoβ¦ Male Norvosβ¦ Π 2β¦ "" TRUE <chr β¦ 6 httpβ¦ 1267 Chett Male "" ΠΠ° Hβ¦ Π 2β¦ FALSE <chr β¦ 7 httpβ¦ 1295 Cresβ¦ Male "" Π 2β¦ Π 2β¦ FALSE <chr β¦ 8 httpβ¦ 130 Ariaβ¦ Female Dornish Π 2β¦ "" TRUE <chr β¦ 9 httpβ¦ 1303 Daenβ¦ Female Valyriβ¦ Π 2β¦ "" TRUE <chr β¦ 10 httpβ¦ 1319 Davoβ¦ Male Westerβ¦ Π 2β¦ "" TRUE <chr β¦ # β¦ Ρ ΠΎΡΠ΅ 20 ΡΠ΅Π΄Π°, ΠΈ 7 Π΄ΠΎΠΏΡΠ»Π½ΠΈΡΠ΅Π»Π½ΠΈ ΠΏΡΠΎΠΌΠ΅Π½Π»ΠΈΠ²ΠΈ: mother , spouse ,
#> # allegiances , books , povBooks , tvSeries ,
#> # playedByΠ‘ΡΡΡΠΊΡΡΡΠ° got_chars Π΅ ΠΌΠ°Π»ΠΊΠΎ ΠΏΠΎ-ΡΠ»ΠΎΠΆΠ½Π° ΠΎΡ gh_users, Π·Π°ΡΠΎΡΠΎ Π½ΡΠΊΠΎΠΈ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠΈ Π½Π° ΡΠΏΠΈΡΡΠΊΠ° ΡΠΈΠΌΠ²ΠΎΠ» ΡΠ°ΠΌΠΈΡΠ΅ ΠΏΠΎ ΡΠ΅Π±Π΅ ΡΠΈ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΠ²Π°Ρ ΡΠΏΠΈΡΡΠΊ, Π² ΡΠ΅Π·ΡΠ»ΡΠ°Ρ Π½Π° ΠΊΠΎΠ΅ΡΠΎ ΠΏΠΎΠ»ΡΡΠ°Π²Π°ΠΌΠ΅ ΠΊΠΎΠ»ΠΎΠ½ΠΈ β ΡΠΏΠΈΡΡΡΠΈ:
ΡΠΈΠΌΠ²ΠΎΠ»ΠΈ2 %>% select_if(is.list)
#> # A tibble: 30 x 7
#> titles aliases allegiances books povBooks tvSeries playedBy
#>
#> 1
#> 2
#> 3
#> 4
#> 5
#> 6
#> 7
#> 8
#> 9
#> 10
#> # β¦ Ρ ΠΎΡΠ΅ 20 ΡΠ΅Π΄Π°ΠΠ°ΡΠΈΡΠ΅ ΡΠ»Π΅Π΄Π²Π°ΡΠΈ ΡΡΡΠΏΠΊΠΈ Π·Π°Π²ΠΈΡΡΡ ΠΎΡ ΡΠ΅Π»ΠΈΡΠ΅ Π½Π° Π°Π½Π°Π»ΠΈΠ·Π°. ΠΠΎΠΆΠ΅ Π±ΠΈ Π΅ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ Π΄Π° Π²ΡΠ²Π΅Π΄Π΅ΡΠ΅ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ Π·Π° Π²ΡΡΠΊΠ° ΠΊΠ½ΠΈΠ³Π° ΠΈ ΡΠ΅ΡΠΈΠ°Π», Π² ΠΊΠΎΠΉΡΠΎ ΡΠ΅ ΠΏΠΎΡΠ²ΡΠ²Π° ΠΏΠ΅ΡΡΠΎΠ½Π°ΠΆΡΡ:
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
#>
#> 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
#> # β¦ Ρ 170 ΠΏΠΎΠ²Π΅ΡΠ΅ ΡΠ΅Π΄Π°ΠΠ»ΠΈ, ΠΌΠΎΠΆΠ΅ Π±ΠΈ, ΠΈΡΠΊΠ°ΡΠ΅ Π΄Π° ΡΡΠ·Π΄Π°Π΄Π΅ΡΠ΅ ΡΠ°Π±Π»ΠΈΡΠ°, ΠΊΠΎΡΡΠΎ Π΄Π° ΡΡΠΏΠΎΡΡΠ°Π²ΠΈ ΠΏΠ΅ΡΡΠΎΠ½Π°ΠΆΠ° Ρ ΠΏΡΠΎΠΈΠ·Π²Π΅Π΄Π΅Π½ΠΈΠ΅ΡΠΎ:
chars2 %>%
select(name, title = titles) %>%
unnest_longer(title)
#> # A tibble: 60 x 2
#> name title
#>
#> 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 ""
#> # β¦ Ρ 50 ΠΏΠΎΠ²Π΅ΡΠ΅ ΡΠ΅Π΄Π°(ΠΠ±ΡΡΠ½Π΅ΡΠ΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π½Π° ΠΏΡΠ°Π·Π½ΠΈΡΠ΅ ΡΡΠΎΠΉΠ½ΠΎΡΡΠΈ "" Π² ΠΏΠΎΠ»Π΅ΡΠΎ title, ΡΠΎΠ²Π° Π΅ ΡΠ²ΡΡΠ·Π°Π½ΠΎ Ρ Π³ΡΠ΅ΡΠΊΠΈ, Π΄ΠΎΠΏΡΡΠ½Π°ΡΠΈ ΠΏΡΠΈ Π²ΡΠ²Π΅ΠΆΠ΄Π°Π½Π΅ Π½Π° Π΄Π°Π½Π½ΠΈ Π² got_chars: Π½Π°ΠΈΡΡΠΈΠ½Π°, ΠΏΠ΅ΡΡΠΎΠ½Π°ΠΆΠΈΡΠ΅, Π·Π° ΠΊΠΎΠΈΡΠΎ Π½ΡΠΌΠ° ΡΡΠΎΡΠ²Π΅ΡΡΡΠ²Π°ΡΠΈ Π·Π°Π³Π»Π°Π²ΠΈΡ Π½Π° ΠΊΠ½ΠΈΠ³ΠΈ ΠΈ ΡΠ΅ΡΠΈΠ°Π»ΠΈ Π² ΠΏΠΎΠ»Π΅ΡΠΎ title ΡΡΡΠ±Π²Π° Π΄Π° ΠΈΠΌΠ°Ρ Π²Π΅ΠΊΡΠΎΡ Ρ Π΄ΡΠ»ΠΆΠΈΠ½Π° 0, Π° Π½Π΅ Π²Π΅ΠΊΡΠΎΡ Ρ Π΄ΡΠ»ΠΆΠΈΠ½Π° 1, ΡΡΠ΄ΡΡΠΆΠ°Ρ ΠΏΡΠ°Π·Π΅Π½ Π½ΠΈΠ·.)
ΠΠΎΠΆΠ΅ΠΌ Π΄Π° ΠΏΡΠ΅ΠΏΠΈΡΠ΅ΠΌ Π³ΠΎΡΠ½ΠΈΡ ΠΏΡΠΈΠΌΠ΅Ρ, ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΉΠΊΠΈ ΡΡΠ½ΠΊΡΠΈΡΡΠ° unnest_auto(). Π’ΠΎΠ·ΠΈ ΠΏΠΎΠ΄Ρ
ΠΎΠ΄ Π΅ ΡΠ΄ΠΎΠ±Π΅Π½ Π·Π° Π΅Π΄Π½ΠΎΠΊΡΠ°ΡΠ½ΠΎ Π°Π½Π°Π»ΠΈΠ·ΠΈΡΠ°Π½Π΅, Π½ΠΎ Π½Π΅ Π±ΠΈΠ²Π° Π΄Π° ΡΠ΅ ΡΠ°Π·ΡΠΈΡΠ° Π½Π° unnest_auto() Π·Π° ΡΠ΅Π΄ΠΎΠ²Π½Π° ΡΠΏΠΎΡΡΠ΅Π±Π°. ΠΡΡΠΈΠ½Π°ΡΠ° Π΅, ΡΠ΅ Π°ΠΊΠΎ ΡΡΡΡΠΊΡΡΡΠ°ΡΠ° Π½Π° Π΄Π°Π½Π½ΠΈΡΠ΅ ΡΠ΅ ΠΏΡΠΎΠΌΠ΅Π½ΠΈ unnest_auto() ΠΌΠΎΠΆΠ΅ Π΄Π° ΡΠ΅ Π½Π°Π»ΠΎΠΆΠΈ Π΄Π° ΠΏΡΠΎΠΌΠ΅Π½ΠΈΡΠ΅ ΠΈΠ·Π±ΡΠ°Π½ΠΈΡ ΠΌΠ΅Ρ
Π°Π½ΠΈΠ·ΡΠΌ Π·Π° ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΡΠ²Π°Π½Π΅ Π½Π° Π΄Π°Π½Π½ΠΈ; Π°ΠΊΠΎ ΠΏΡΡΠ²ΠΎΠ½Π°ΡΠ°Π»Π½ΠΎ ΡΠΎΠΉ Π΅ ΡΠ°Π·Π³ΡΠ²Π°Π» ΡΠΏΠΈΡΡΡΠ½ΠΈΡΠ΅ ΠΊΠΎΠ»ΠΎΠ½ΠΈ Π² ΡΠ΅Π΄ΠΎΠ²Π΅, ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΉΠΊΠΈ unnest_longer(), ΡΠΎ ΠΏΡΠΈ ΠΏΡΠΎΠΌΡΠ½Π° Π½Π° ΡΡΡΡΠΊΡΡΡΠ°ΡΠ° Π½Π° Π²Ρ
ΠΎΠ΄ΡΡΠΈΡΠ΅ Π΄Π°Π½Π½ΠΈ Π»ΠΎΠ³ΠΈΠΊΠ°ΡΠ° ΠΌΠΎΠΆΠ΅ Π΄Π° Π±ΡΠ΄Π΅ ΠΏΡΠΎΠΌΠ΅Π½Π΅Π½Π° Π² ΠΏΠΎΠ»Π·Π° Π½Π° unnest_wider(), ΠΈ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ΡΠΎ Π½Π° ΡΠ°ΠΊΡΠ² ΠΏΠΎΠ΄Ρ
ΠΎΠ΄ ΠΏΠΎΡΡΠΎΡΠ½Π½ΠΎ ΠΌΠΎΠΆΠ΅ Π΄Π° Π΄ΠΎΠ²Π΅Π΄Π΅ Π΄ΠΎ Π½Π΅ΠΎΡΠ°ΠΊΠ²Π°Π½ΠΈ Π³ΡΠ΅ΡΠΊΠΈ.
tibble(char = got_chars) %>%
unnest_auto(char) %>%
select(name, title = titles) %>%
unnest_auto(title)
#> ΠΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ Π½Π° `unnest_wider(char)`; Π΅Π»Π΅ΠΌΠ΅Π½ΡΠΈΡΠ΅ ΠΈΠΌΠ°Ρ 18 ΠΎΠ±ΡΠΈ ΠΈΠΌΠ΅Π½Π°
#> ΠΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ Π½Π° `unnest_longer(title)`; Π½ΠΈΡΠΎ Π΅Π΄ΠΈΠ½ Π΅Π»Π΅ΠΌΠ΅Π½Ρ Π½ΡΠΌΠ° ΠΈΠΌΠ΅Π½Π°
#> # Π ΡΠΈΠ±Π»ΠΈ: 60 x 2
#> name title
#>
#> 1 Theon Greyjoy Prince of Winterfell
#> 2 Theon Greyjoy Captain of Sea Bitch
#> 3 Theon Greyjoy Lord of the Iron Islands (ΠΏΠΎ Π·Π°ΠΊΠΎΠ½ Π½Π° Π·Π΅Π»Π΅Π½ΠΈΡΠ΅ Π·Π΅ΠΌΠΈ)
#> 4 Tyrion Lannister Acting Hand of the King (Π±ΠΈΠ²Ρ)
#> 5 Tyrion Lannister Master of Coin (Π±ΠΈΠ²Ρ)
#> 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 ""
#> # β¦ Ρ ΠΎΡΠ΅ 50 ΡΠ΅Π΄Π°ΠΠ΅ΠΎΠΊΠΎΠ΄ΠΈΡΠ°Π½Π΅ Ρ ΠΏΠΎΠΌΠΎΡΡΠ° Π½Π° Google
Π‘Π΅Π³Π° ΡΠ΅ ΡΠ°Π·Π³Π»Π΅Π΄Π°ΠΌΠ΅ ΠΏΠΎ-ΡΠ»ΠΎΠΆΠ½Π° ΡΡΡΡΠΊΡΡΡΠ° Π½Π° Π΄Π°Π½Π½ΠΈ, ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΈ ΠΎΡ ΡΡΠ»ΡΠ³Π°ΡΠ° Π·Π° Π³Π΅ΠΎΠΊΠΎΠ΄ΠΈΡΠ°Π½Π΅ Π½Π° Google. ΠΠ΅ΡΠΈΡΠ°Π½Π΅ΡΠΎ Π½Π° ΡΠ΄ΠΎΡΡΠΎΠ²Π΅ΡΠΈΡΠ΅Π»Π½ΠΈ Π΄Π°Π½Π½ΠΈ ΠΏΡΠΎΡΠΈΠ²ΠΎΡΠ΅ΡΠΈ Π½Π° ΡΡΠ»ΠΎΠ²ΠΈΡΡΠ° Π½Π° ΡΠ°Π±ΠΎΡΠ° Ρ API Google Maps, Π·Π°ΡΠΎΠ²Π° ΠΏΡΡΠ²ΠΎ ΡΠ΅ Π½Π°ΠΏΠΈΡΠ° ΠΏΡΠΎΡΡΠ° ΠΎΠ±Π²ΠΈΠ²ΠΊΠ° Π·Π° API. Π’Ρ ΡΠ΅ Π±ΡΠ΄Π΅ Π±Π°Π·ΠΈΡΠ°Π½Π° Π½Π° ΡΡΡ ΡΠ°Π½Π΅Π½ΠΈΠ΅ΡΠΎ Π½Π° ΠΊΠ»ΡΡΠ° Π·Π° API Π½Π° Google Maps Π² ΠΏΡΠΎΠΌΠ΅Π½Π»ΠΈΠ²Π° Π½Π° ΡΡΠ΅Π΄Π°ΡΠ°; Π°ΠΊΠΎ Π² ΠΏΡΠΎΠΌΠ΅Π½Π»ΠΈΠ²ΠΈΡΠ΅ Π½Π° ΡΡΠ΅Π΄Π°ΡΠ° Π½Π΅ Π΅ Π·Π°ΠΏΠ°Π·Π΅Π½ ΠΊΠ»ΡΡ Π·Π° ΡΠ°Π±ΠΎΡΠ° Ρ API Google Maps, ΡΡΠ°Π³ΠΌΠ΅Π½ΡΠΈΡΠ΅ ΠΎΡ ΠΊΠΎΠ΄Π°, ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π΅Π½ΠΈ Π² ΡΠΎΠ·ΠΈ ΡΠ°Π·Π΄Π΅Π», Π½ΡΠΌΠ° Π΄Π° Π±ΡΠ΄Π°Ρ ΠΈΠ·ΠΏΡΠ»Π½Π΅Π½ΠΈ.
has_key <- !identical(Sys.getenv("GOOGLE_MAPS_API_KEY"), "")
if (!has_key) {
message("ΠΠ΅ Π΅ Π½Π°ΠΌΠ΅ΡΠ΅Π½ ΠΊΠ»ΡΡ Π·Π° Google Maps API; ΡΡΠ°Π³ΠΌΠ΅Π½ΡΠΈΡΠ΅ ΠΎΡ ΠΊΠΎΠ΄Π° Π½ΡΠΌΠ° Π΄Π° Π±ΡΠ΄Π°Ρ ΠΈΠ·ΠΏΡΠ»Π½Π΅Π½ΠΈ")
}
# 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)
}Π‘ΠΏΠΈΡΡΠΊΡΡ, ΠΊΠΎΠΉΡΠΎ Π²ΡΡΡΠ° ΡΠ°Π·ΠΈ ΡΡΠ½ΠΊΡΠΈΡ, Π΅ Π΄ΠΎΡΡΠ° ΡΠ»ΠΎΠΆΠ΅Π½:
Ρ
ΡΡΡΡΠ½
ΡΡΡ(Ρ
ΡΡΡΡΠ½)
#> Π‘ΠΏΠΈΡΡΠΊ ΠΎΡ 2
#> $ ΡΠ΅Π·ΡΠ»ΡΠ°ΡΠΈ:Π‘ΠΏΠΈΡΡΠΊ ΠΎΡ 1
#> ..$ :Π‘ΠΏΠΈΡΡΠΊ ΠΎΡ 5
#> .. ..$ Π°Π΄ΡΠ΅Ρ_ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠΈ:Π‘ΠΏΠΈΡΡΠΊ ΠΎΡ 4
#> .. .. ..$ :Π‘ΠΏΠΈΡΡΠΊ ΠΎΡ 3
#> .. .. .. ..$ Π΄ΡΠ»Π³ΠΎ_ΠΈΠΌΠ΅ : chr "Π₯ΡΡΡΡΠ½"
#> .. .. .. ..$ ΠΊΡΠ°ΡΠΊΠΎ_ΠΈΠΌΠ΅: chr "Π₯ΡΡΡΡΠ½"
#> .. .. .. ..$ ΡΠΈΠΏΠΎΠ²Π΅ :Π‘ΠΏΠΈΡΡΠΊ ΠΎΡ 2
#> .. .. .. .. ..$ : chr "Π³ΡΠ°Π΄"
#> .. .. .. .. ..$ : chr "ΠΏΠΎΠ»ΠΈΡΠΈΡΠ΅ΡΠΊΠΈ"
#> .. .. ..$ :Π‘ΠΏΠΈΡΡΠΊ ΠΎΡ 3
#> .. .. .. ..$ Π΄ΡΠ»Π³ΠΎ_ΠΈΠΌΠ΅ : chr "ΠΠΊΡΡΠ³ Π₯Π°ΡΠΈΡ"
#> .. .. .. ..$ ΠΊΡΠ°ΡΠΊΠΎ_ΠΈΠΌΠ΅: chr "ΠΠΊΡΡΠ³ Π₯Π°ΡΠΈΡ"
#> .. .. .. ..$ ΡΠΈΠΏΠΎΠ²Π΅ :Π‘ΠΏΠΈΡΡΠΊ ΠΎΡ 2
#> .. .. .. .. ..$ : chr "Π°Π΄ΠΌΠΈΠ½ΠΈΡΡΡΠ°ΡΠΈΠ²Π½ΠΎ_nΠΈΠ²ΠΎ_2"
#> .. .. .. .. ..$ : chr "ΠΏΠΎΠ»ΠΈΡΠΈΡΠ΅ΡΠΊΠΈ"
#> .. .. ..$ :Π‘ΠΏΠΈΡΡΠΊ ΠΎΡ 3
#> .. .. .. ..$ Π΄ΡΠ»Π³ΠΎ_ΠΈΠΌΠ΅ : chr "Π’Π΅ΠΊΡΠ°Ρ"
#> .. .. .. ..$ ΠΊΡΠ°ΡΠΊΠΎ_ΠΈΠΌΠ΅: chr "Π’Π₯"
#> .. .. .. ..$ ΡΠΈΠΏΠΎΠ²Π΅ :Π‘ΠΏΠΈΡΡΠΊ ΠΎΡ 2
#> .. .. .. .. ..$ : chr "Π°Π΄ΠΌΠΈΠ½ΠΈΡΡΡΠ°ΡΠΈΠ²Π½ΠΎ_nΠΈΠ²ΠΎ_1"
#> .. .. .. .. ..$ : chr "ΠΏΠΎΠ»ΠΈΡΠΈΡΠ΅ΡΠΊΠΈ"
#> .. .. ..$ :Π‘ΠΏΠΈΡΡΠΊ ΠΎΡ 3
#> .. .. .. ..$ Π΄ΡΠ»Π³ΠΎ_ΠΈΠΌΠ΅ : chr "Π‘ΡΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈ ΡΠ°ΡΠΈ"
#> .. .. .. ..$ ΠΊΡΠ°ΡΠΊΠΎ_ΠΈΠΌΠ΅: chr "Π‘Π"
#> .. .. .. ..$ ΡΠΈΠΏΠΎΠ²Π΅ :Π‘ΠΏΠΈΡΡΠΊ ΠΎΡ 2
#> .. .. .. .. ..$ : chr "Π΄ΡΡΠΆΠ°Π²Π°"
#> .. .. .. .. ..$ : chr "ΠΏΠΎΠ»ΠΈΡΠΈΡΠ΅ΡΠΊΠΈ"
#> .. ..$ ΡΠΎΡΠΌΠ°ΡΠΈΡΠ°Π½_Π°Π΄ΡΠ΅Ρ : chr "Π₯ΡΡΡΡΠ½, Π’Π₯, Π‘Π"
#> .. ..$ Π³Π΅ΠΎΠΌΠ΅ΡΡΠΈΡ :Π‘ΠΏΠΈΡΡΠΊ ΠΎΡ 4
#> .. .. ..$ Π³ΡΠ°Π½ΠΈΡΠΈ :Π‘ΠΏΠΈΡΡΠΊ ΠΎΡ 2
#> .. .. .. ..$ ΡΠ΅Π²Π΅ΡΠΎΠΈΠ·ΡΠΎΠΊ:Π‘ΠΏΠΈΡΡΠΊ ΠΎΡ 2
#> .. .. .. .. ..$ ΡΠΈΡΠΈΠ½Π°: num 30.1
#> .. .. .. .. ..$ Π΄ΡΠ»ΠΆΠΈΠ½Π°: num -95
#> .. .. .. ..$ ΡΠ³ΠΎΠ·Π°ΠΏΠ°Π΄:Π‘ΠΏΠΈΡΡΠΊ ΠΎΡ 2
#> .. .. .. .. ..$ ΡΠΈΡΠΈΠ½Π°: num 29.5
#> .. .. .. .. ..$ Π΄ΡΠ»ΠΆΠΈΠ½Π°: num -95.8
#> .. .. ..$ ΠΌΠ΅ΡΡΠΎΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ :Π‘ΠΏΠΈΡΡΠΊ ΠΎΡ 2
#> .. .. .. ..$ ΡΠΈΡΠΈΠ½Π°: num 29.8
#> .. .. .. ..$ Π΄ΡΠ»ΠΆΠΈΠ½Π°: num -95.4
#> .. .. ..$ ΡΠΈΠΏ_ΠΌΠ΅ΡΡΠΎΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅: chr "ΠΠ ΠΠΠΠΠΠΠ’ΠΠΠΠ"
#> .. .. ..$ Π²ΠΈΠ·ΡΠΎΡ :Π‘ΠΏΠΈΡΡΠΊ ΠΎΡ 2
#> .. .. .. ..$ ΡΠ΅Π²Π΅ΡΠΎΠΈΠ·ΡΠΎΠΊ:Π‘ΠΏΠΈΡΡΠΊ ΠΎΡ 2
#> .. .. .. .. ..$ ΡΠΈΡΠΈΠ½Π°: num 30.1
#> .. .. .. .. ..$ Π΄ΡΠ»ΠΆΠΈΠ½Π°: num -95
#> .. .. .. ..$ ΡΠ³ΠΎΠ·Π°ΠΏΠ°Π΄:Π‘ΠΏΠΈΡΡΠΊ ΠΎΡ 2
#> .. .. .. .. ..$ ΡΠΈΡΠΈΠ½Π°: num 29.5
#> .. .. .. .. ..$ Π΄ΡΠ»ΠΆΠΈΠ½Π°: num -95.8
#> .. ..$ place_id : chr "ChIJAYWNSLS4QIYROwVl894CDco"
#> .. ..$ ΡΠΈΠΏΠΎΠ²Π΅ :Π‘ΠΏΠΈΡΡΠΊ ΠΎΡ 2
#> .. .. ..$ : chr "Π³ΡΠ°Π΄"
#> .. .. ..$ : chr "ΠΏΠΎΠ»ΠΈΡΠΈΡΠ΅ΡΠΊΠΈ"
#> $ ΡΡΠ°ΡΡΡ : chr "OK"Π©Π°ΡΡΠ»ΠΈΠ²ΠΈ ΡΠΌΠ΅, ΡΠ΅ ΠΌΠΎΠΆΠ΅ΠΌ Π΄Π° ΡΠ΅ΡΠΈΠΌ ΡΡΡΠΏΠΊΠ° ΠΏΠΎ ΡΡΡΠΏΠΊΠ° ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ° Ρ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΡΠ²Π°Π½Π΅ΡΠΎ Π½Π° ΡΠ΅Π·ΠΈ Π΄Π°Π½Π½ΠΈ Π² ΡΠ°Π±Π»ΠΈΡΠ΅Π½ ΡΠΎΡΠΌΠ°Ρ Ρ ΠΏΠΎΠΌΠΎΡΡΠ° Π½Π° ΡΡΠ½ΠΊΡΠΈΠΈ tidyr. ΠΠ° Π΄Π° Π½Π°ΠΏΡΠ°Π²Ρ Π·Π°Π΄Π°ΡΠ°ΡΠ° ΠΌΠ°Π»ΠΊΠΎ ΠΏΠΎ-ΡΠ»ΠΎΠΆΠ½Π° ΠΈ ΡΠ΅Π°Π»ΠΈΡΡΠΈΡΠ½Π°, ΡΠ΅ Π·Π°ΠΏΠΎΡΠ½Π° Ρ Π³Π΅ΠΎΠΊΠΎΠ΄ΠΈΡΠ°Π½Π΅ Π½Π° Π½ΡΠΊΠΎΠ»ΠΊΠΎ Π³ΡΠ°Π΄Π°:
Π³ΡΠ°Π΄ <- c ( "Π₯ΡΡΡΡΠ½" , "ΠΠ" , "ΠΡ ΠΠΎΡΠΊ" , "Π§ΠΈΠΊΠ°Π³ΠΎ" , "Π‘ΠΏΡΠΈΠ½Π³ΡΠΈΠ»Π΄" ) Π³ΡΠ°Π΄_Π³Π΅ΠΎ <- purrr::map (Π³ΡΠ°Π΄, Π³Π΅ΠΎΠΊΠΎΠ΄ΠΈΡΠ°Π½Π΅) ΠΠΎΠ»ΡΡΠ΅Π½ΠΈΡΡ ΡΠ΅Π·ΡΠ»ΡΠ°Ρ ΡΠ΅ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΡΠ²Π°ΠΌ Π² tibble, Π·Π° ΡΠ΄ΠΎΠ±ΡΡΠ²ΠΎ ΡΠ΅ Π΄ΠΎΠ±Π°Π²Ρ ΠΊΠΎΠ»ΠΎΠ½Π° Ρ ΡΡΠΎΡΠ²Π΅ΡΠ½ΠΎΡΠΎ ΠΈΠΌΠ΅ Π½Π° Π³ΡΠ°Π΄Π°.
Π»ΠΎΠΊ <- tibble(Π³ΡΠ°Π΄ = Π³ΡΠ°Π΄, json = Π³ΡΠ°Π΄_Π³Π΅ΠΎ)
Π»ΠΎΠΊ
#> # A tibble: 5 x 2
#> Π³ΡΠ°Π΄ json
#> <chr> <list>
#> 1 Π₯ΡΡΡΡΠ½ <named list [2]>
#> 2 ΠΠ <named list [2]>
#> 3 ΠΡ ΠΠΎΡΠΊ <named list [2]>
#> 4 Π§ΠΈΠΊΠ°Π³ΠΎ <named list [2]>
#> 5 Π‘ΠΏΡΠΈΠ½Π³ΡΠΈΠ»Π΄ <named list [2]>ΠΡΡΠ²ΠΎΡΠΎ Π½ΠΈΠ²ΠΎ ΡΡΠ΄ΡΡΠΆΠ° ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠΈΡΠ΅ ΡΡΠ°ΡΡΡ ΠΈ ΡΠ΅Π·ΡΠ»ΡΠ°ΡΠΈ, ΠΊΠΎΠΈΡΠΎ ΠΌΠΎΠΆΠ΅ΠΌ Π΄Π° ΡΠ°Π·Π³ΡΠ½Π΅ΠΌ Ρ ΠΏΠΎΠΌΠΎΡΡΠ° Π½Π° unnest_wider() :
Π»ΠΎΠΊ %>%
unnest_wider(json)
#> # A tibble: 5 x 3
#> Π³ΡΠ°Π΄ ΡΠ΅Π·ΡΠ»ΡΠ°ΡΠΈ ΡΡΠ°ΡΡΡ
#> <chr> <list> <chr>
#> 1 Π₯ΡΡΡΡΠ½ <list [1]> OK
#> 2 ΠΠ <list [1]> OK
#> 3 ΠΡ ΠΠΎΡΠΊ <list [1]> OK
#> 4 Π§ΠΈΠΊΠ°Π³ΠΎ <list [1]> OK
#> 5 Π‘ΠΏΡΠΈΠ½Π³ΡΠΈΠ»Π΄ <list [1]> OKΠΠ±ΡΡΠ½Π΅ΡΠ΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, ΡΠ΅ ΡΠ΅Π·ΡΠ»ΡΠ°ΡΠΈ Π΅ ΠΌΠ½ΠΎΠ³ΠΎΡΡΠ΅ΠΏΠ΅Π½Π΅Π½ ΡΠΏΠΈΡΡΠΊ. ΠΠΎΠ²Π΅ΡΠ΅ΡΠΎ Π³ΡΠ°Π΄ΠΎΠ²Π΅ ΠΈΠΌΠ°Ρ 1 Π΅Π»Π΅ΠΌΠ΅Π½Ρ (ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΠ²Π°Ρ ΡΠ½ΠΈΠΊΠ°Π»Π½Π°ΡΠ° ΡΡΠΎΠΉΠ½ΠΎΡΡ, ΠΊΠΎΡΡΠΎ ΡΡΠΎΡΠ²Π΅ΡΡΡΠ²Π° Π½Π° API Π·Π° Π³Π΅ΠΎΠΊΠΎΠ΄ΠΈΡΠ°Π½Π΅), Π½ΠΎ Π·Π° Π‘ΠΏΡΠΈΠ½Π³ΡΠΈΠ»Π΄ ΡΠ΅ ΡΠ° Π΄Π²Π°. ΠΠΎΠΆΠ΅ΠΌ Π΄Π° Π³ΠΈ ΡΠ°Π·Π΄Π΅Π»ΠΈΠΌ Π½Π° ΠΎΡΠ΄Π΅Π»Π½ΠΈ ΡΠ΅Π΄ΠΎΠ²Π΅ Ρ ΠΏΠΎΠΌΠΎΡΡΠ° Π½Π° unnest_longer() :
loc %>%
unnest_wider(json) %>%
unnest_longer(results)
#> # A tibble: 5 x 3
#> city results status
#>
#> 1 Houston OK
#> 2 LA OK
#> 3 New York OK
#> 4 Chicago OK
#> 5 Springfield 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
#>
#> 1 Houstβ¦ Houston, TX, USA <named β¦ ChIJAYWNβ¦ 2 LA Los Angeles, CAβ¦ <named β¦ ChIJE9onβ¦ 3 New Yβ¦ New York, NY, Uβ¦ <named β¦ ChIJOwg_β¦ 4 Chicaβ¦ Chicago, IL, USA <named β¦ ChIJ7cv0β¦ 5 Sprinβ¦ 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
#>
#> 1 Hous⦠Houston, TX, USA <name⦠2 LA Los Angeles, CA⦠<name⦠3 New ⦠New York, NY, U⦠<name⦠4 Chic⦠Chicago, IL, USA <name⦠5 Spri⦠Springfield, MO⦠<name⦠# ⦠with 4 more variables: viewport , place_id , types ,
#> # statusΠ ΡΠ»Π΅Π΄ ΡΠΎΠ²Π° ΠΌΠ΅ΡΡΠΎΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΡΠΎ, Π·Π° ΠΊΠΎΠ΅ΡΠΎ Π΅ Π½ΡΠΆΠ½ΠΎ Π΄Π° ΡΠ°Π·ΡΠΈΡΠΈΠΌ 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
#>
#> 1 Hous⦠Houston, TX, USA 2 LA Los Angeles, CA⦠3 New ⦠New York, NY, U⦠4 Chic⦠Chicago, IL, USA 5 Spri⦠Springfield, MO⦠# ⦠with 4 more variables: viewport , place_id , types ,
#> # statusΠΡΠ½ΠΎΠ²ΠΎ, 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
#>
#> 1 Hous⦠Houston, TX, USA 2 LA Los Angeles, CA⦠3 New ⦠New York, NY, U⦠4 Chic⦠Chicago, IL, USA 5 Spri⦠Springfield, MO⦠# ⦠with 4 more variables: viewport , place_id , types ,
#> # statusΠ‘ΡΡΠΎ ΡΠ°ΠΊΠ° ΠΌΠΎΠΆΠ΅ΠΌ Π΄Π° ΡΠ°Π·Π³Π»Π΅Π΄Π°ΠΌΠ΅ ΠΏΡΡΠ²ΠΈΡ Π°Π΄ΡΠ΅Ρ Π·Π° Π²ΡΠ΅ΠΊΠΈ Π³ΡΠ°Π΄:
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
#>
#> 1 Hous⦠Houston, TX, USA 2 LA Los Angeles, CA⦠3 New ⦠New York, NY, U⦠4 Chic⦠Chicago, IL, USA 5 Spri⦠Springfield, MO⦠# ⦠with 4 more variables: viewport , place_id , types ,
#> # statusΠΠ»ΠΈ Π΄Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΡΠ΅ hoist() Π·Π° ΠΌΠ½ΠΎΠ³ΠΎΡΡΠ΅ΠΏΠ΅Π½Π½ΠΎ Π½Π°Π²Π»ΠΈΠ·Π°Π½Π΅, Π·Π° Π΄Π° ΠΏΡΠ΅ΠΌΠΈΠ½Π΅ΡΠ΅ Π΄ΠΈΡΠ΅ΠΊΡΠ½ΠΎ ΠΊΡΠΌ 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
#>
#> 1 Houston 29.8 -95.4
#> 2 LA 34.1 -118.
#> 3 New York 40.7 -74.0
#> 4 Chicago 41.9 -87.6
#> 5 Springfield 37.2 -93.3ΠΠΈΡΠΊΠΎΠ³ΡΠ°ΡΠΈΡ Π½Π° Π¨Π°ΡΠ»Π° ΠΠ΅Π»ΡΠ°Π½Π΄
Π Π·Π°ΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ ΡΠ΅ ΡΠ°Π·Π³Π»Π΅Π΄Π°ΠΌΠ΅ Π½Π°ΠΉ-ΡΠ»ΠΎΠΆΠ½Π°ΡΠ° ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΈΡ β Π΄ΠΈΡΠΊΠΎΠ³ΡΠ°ΡΠΈΡΡΠ° Π½Π° Π¨Π°ΡΠ»Π° ΠΠ΅Π»ΡΠ°Π½Π΄. ΠΠ°ΠΊΡΠΎ Π² ΠΏΡΠ΅Π΄Ρ
ΠΎΠ΄Π½ΠΈΡΠ΅ ΠΏΡΠΈΠΌΠ΅ΡΠΈ, Π·Π°ΠΏΠΎΡΠ²Π°ΠΌΠ΅ Ρ ΠΊΠΎΠ½Π²Π΅ΡΡΠΈΡΠ°Π½Π΅ Π½Π° ΡΠΏΠΈΡΡΠΊΠ° Π² Π΄Π°ΡΠ°ΡΡΠ΅ΠΉΠΌ Ρ Π΅Π΄ΠΈΠ½ ΡΡΡΠ»Π±, ΡΠ»Π΅Π΄ ΠΊΠΎΠ΅ΡΠΎ ΡΠ΅ Π³ΠΎ ΡΠ°Π·ΡΠΈΡΠΈΠΌ, Π·Π° Π΄Π° ΡΡΠ°Π½Π΅ Π²ΡΠ΅ΠΊΠΈ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ ΠΎΡΠ΄Π΅Π»Π΅Π½ ΡΡΡΠ»Π±. ΠΡΠ²Π΅Π½ ΡΠΎΠ²Π° ΡΠ΅ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΡΠ²Π°ΠΌ ΡΡΡΠ»Π±Π° date_added Π² ΡΡΠΎΡΠ²Π΅ΡΠ½ΠΈΡ ΡΠΎΡΠΌΠ°Ρ Π½Π° Π΄Π°ΡΠ° ΠΈ ΡΠ°Ρ Π² R.
discs %
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
#>
#> 1 354823933 2019-02-16 17:48:59 7496378 0
#> 2 354092601 2019-02-13 14:13:11 4490852 0
#> 3 354091476 2019-02-13 14:07:23 9827276 0
#> 4 351244906 2019-02-02 11:39:58 9769203 0
#> 5 351244801 2019-02-02 11:39:37 7237138 0
#> 6 351052065 2019-02-01 20:40:53 13117042 0
#> 7 350315345 2019-01-29 15:48:37 7113575 0
#> 8 350315103 2019-01-29 15:47:22 10540713 0
#> 9 350314507 2019-01-29 15:44:08 11260950 0
#> 10 350314047 2019-01-29 15:41:35 11726853 0
#> # β¦ with 145 more rowsΠΠ° ΡΠΎΠ²Π° Π½ΠΈΠ²ΠΎ ΠΏΠΎΠ»ΡΡΠΈΡ
ΠΌΠ΅ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ Π·Π° ΡΠΎΠ²Π° ΠΊΠΎΠ³Π° Π²ΡΠ΅ΠΊΠΈ Π΄ΠΈΡΠΊ Π΅ Π΄ΠΎΠ±Π°Π²Π΅Π½ Π² Π΄ΠΈΡΠΊΠΎΠ³ΡΠ°ΡΠΈΡΡΠ° Π½Π° Π¨Π°ΡΠ»Π°, Π½ΠΎ Π½Π΅ Π²ΠΈΠΆΠ΄Π°ΠΌΠ΅ Π½ΠΈΠΊΠ°ΠΊΠ²ΠΈ Π΄Π°Π½Π½ΠΈ Π·Π° ΡΠ°ΠΌΠΈΡΠ΅ Π΄ΠΈΡΠΊΠΎΠ²Π΅. ΠΠ° ΡΠΎΠ²Π° ΡΡΡΠ±Π²Π° Π΄Π° ΡΠ°Π·ΡΠΈΡΠΈΠΌ ΡΡΡΠ»Π±Π° 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":
Π΄ΠΈΡΠΊΠΎΠ² %>% unnest_wider(basic_information, names_repair = "unique")
#> ΠΠΎΠ²ΠΈ ΠΈΠΌΠ΅Π½Π°:
#> * id -> id...6
#> * id -> id...14
#> # Π’ΠΈΠ±Π»Π°: 155 x 15
#> instance_id date_added labels year artists id...6 thumb title
#>
#> 1 354823933 2019-02-16 17:48:59 <listβ¦ 2015 2 354092601 2019-02-13 14:13:11 <listβ¦ 2013 3 354091476 2019-02-13 14:07:23 <listβ¦ 2017 4 351244906 2019-02-02 11:39:58 <listβ¦ 2017 5 351244801 2019-02-02 11:39:37 <listβ¦ 2015 6 351052065 2019-02-01 20:40:53 <listβ¦ 2019 7 350315345 2019-01-29 15:48:37 <listβ¦ 2014 8 350315103 2019-01-29 15:47:22 <listβ¦ 2015 9 350314507 2019-01-29 15:44:08 <listβ¦ 2017 10 350314047 2019-01-29 15:41:35 <listβ¦ 2017 # β¦ Ρ 145 ΠΏΠΎΠ²Π΅ΡΠ΅ ΡΠ΅Π΄ΠΎΠ²Π΅ ΠΈ 7 Π΄ΠΎΠΏΡΠ»Π½ΠΈΡΠ΅Π»Π½ΠΈ ΠΏΡΠΎΠΌΠ΅Π½Π»ΠΈΠ²ΠΈ: ΡΠΎΡΠΌΠ°ΡΠΈ ,
#> # cover_image , resource_url , master_id ,
#> # master_url , id...14 , ΡΠ΅ΠΉΡΠΈΠ½Π³ΠΡΠΎΠ±Π»Π΅ΠΌΠ°ΡΠ° Π΅, ΡΠ΅ basic_information ΠΏΠΎΠ²ΡΠ°ΡΡ ΠΊΠΎΠ»ΠΎΠ½Π°ΡΠ° id, ΠΊΠΎΡΡΠΎ ΡΡΡΠΎ ΡΠ΅ ΡΡΡ
ΡΠ°Π½ΡΠ²Π° Π½Π° Π½Π°ΠΉ-Π²ΠΈΡΠΎΠΊΠΎΡΠΎ Π½ΠΈΠ²ΠΎ, ΡΠ°ΠΊΠ° ΡΠ΅ ΠΌΠΎΠΆΠ΅ΠΌ ΠΏΡΠΎΡΡΠΎ Π΄Π° Ρ ΠΏΡΠ΅ΠΌΠ°Ρ
Π½Π΅ΠΌ:
Π΄ΠΈΡΠΊΠΎΠ² %>%
select(-id) %>%
unnest_wider(basic_information)
#> # Π’ΠΈΠ±Π»Π°: 155 x 14
#> instance_id date_added labels year artists id thumb title
#>
#> 1 354823933 2019-02-16 17:48:59 <listβ¦ 2015 2 354092601 2019-02-13 14:13:11 <listβ¦ 2013 3 354091476 2019-02-13 14:07:23 <listβ¦ 2017 4 351244906 2019-02-02 11:39:58 <listβ¦ 2017 5 351244801 2019-02-02 11:39:37 <listβ¦ 2015 6 351052065 2019-02-01 20:40:53 <listβ¦ 2019 7 350315345 2019-01-29 15:48:37 <listβ¦ 2014 8 350315103 2019-01-29 15:47:22 <listβ¦ 2015 9 350314507 2019-01-29 15:44:08 <listβ¦ 2017 10 350314047 2019-01-29 15:41:35 <listβ¦ 2017 # β¦ Ρ 145 ΠΏΠΎΠ²Π΅ΡΠ΅ ΡΠ΅Π΄ΠΎΠ²Π΅ ΠΈ 6 Π΄ΠΎΠΏΡΠ»Π½ΠΈΡΠ΅Π»Π½ΠΈ ΠΏΡΠΎΠΌΠ΅Π½Π»ΠΈΠ²ΠΈ: ΡΠΎΡΠΌΠ°ΡΠΈ ,
#> # cover_image , resource_url , master_id ,
#> # master_url , ΡΠ΅ΠΉΡΠΈΠ½Π³ΠΠ°ΡΠΎ Π°Π»ΡΠ΅ΡΠ½Π°ΡΠΈΠ²Π°, ΠΌΠΎΠΆΠ΅ΠΌ Π΄Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΌΠ΅ hoist():
Π΄ΠΈΡΠΊΠΎΠ² %>%
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
#>%
#>% 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β¦
#>% # β¦ Ρ 145 Π΄ΡΡΠ³ΠΈΠΌΠΈ ΡΡΡΠΎΠΊΠ°ΠΌΠΈ ΠΈ 3 Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΡΠΌΠΈ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΠΌΠΈ: basic_information ,
#>% # id , ratingΠ’ΡΠΊ Π±ΡΡΠ·ΠΎ ΠΈΠ·Π²Π»ΠΈΡΠ°ΠΌ ΠΈΠΌΠ΅ΡΠΎ Π½Π° ΠΏΡΡΠ²ΠΈΡ Π»Π΅ΠΉΠ±ΡΠ» ΠΈ ΠΈΠ·ΠΏΡΠ»Π½ΠΈΡΠ΅Π»Ρ ΠΏΠΎ ΠΈΠ½Π΄Π΅ΠΊΡΠ°, ΠΏΠΎΡΠ°ΠΏΡΠΉΠΊΠΈ ΡΠ΅ Π² Π²Π»ΠΎΠΆΠ΅Π½ ΡΠΏΠΈΡΡΠΊ.
ΠΠΎ-ΡΠΈΡΡΠ΅ΠΌΠ°ΡΠΈΡΠ½ΠΈΡΡ ΠΏΠΎΠ΄Ρ ΠΎΠ΄ Π΅ Π΄Π° ΡΠ΅ ΡΡΠ·Π΄Π°Π΄Π°Ρ ΠΎΡΠ΄Π΅Π»Π½ΠΈ ΡΠ°Π±Π»ΠΈΡΠΈ Π·Π° ΠΈΠ·ΠΏΡΠ»Π½ΠΈΡΠ΅Π»Ρ ΠΈ Π»Π΅ΠΉΠ±ΡΠ»Π°:
Π΄ΠΈΡΠΊΠΎΠ²Π΅ %>%
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
#>%
#>% 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
#>% # β¦ Ρ 157 Π΄ΡΡΠ³ΠΈ ΡΠ΅Π΄Π°
dΠΈΡΠΊΠΎΠ²Π΅ %>%
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
#>%
#>% 1 7496378 Numbered Black Cassette 1
#>% 2 4490852 LP Vinyl 1
#>% 3 9827276 "7"" Vinyl 1
#>% 4 9827276 45 RPM Vinyl 1
#>% 5 9827276 EP Vinyl 1
#>% 6 9769203 LP Vinyl 1
#>% 7 9769203 Album Vinyl 1
#>% 8 7237138 "7"" Vinyl 1
#>% 9 7237138 45 RPM Vinyl 1
#>% 10 13117042 "7"" Vinyl 1
#>% # β¦ Ρ 270 Π΄ΡΡΠ³ΠΈ ΡΠ΅Π΄Π°Π‘Π»Π΅Π΄ ΡΠΎΠ²Π° ΠΌΠΎΠΆΠ΅ΡΠ΅ Π΄Π° Π³ΠΈ ΠΏΡΠΈΡΡΠ΅Π΄ΠΈΠ½ΠΈΡΠ΅ ΠΎΠ±ΡΠ°ΡΠ½ΠΎ ΠΊΡΠΌ ΠΎΡΠΈΠ³ΠΈΠ½Π°Π»Π½ΠΈΡ Π½Π°Π±ΠΎΡ ΠΎΡ Π΄Π°Π½Π½ΠΈ, Π°ΠΊΠΎ Π΅ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ.
ΠΠ°ΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅
Π ΡΠ΄ΡΠΎΡΠΎ Π½Π° Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ°ΡΠ° tidyverse Π²Π»ΠΈΠ·Π°Ρ ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²ΠΎ ΠΏΠΎΠ»Π΅Π·Π½ΠΈ ΠΏΠ°ΠΊΠ΅ΡΠΈ, ΠΎΠ±Π΅Π΄ΠΈΠ½Π΅Π½ΠΈ ΠΎΡ ΠΎΠ±ΡΠ° ΡΠΈΠ»ΠΎΡΠΎΡΠΈΡ Π·Π° ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠ° Π½Π° Π΄Π°Π½Π½ΠΈ.
Π ΡΠ°Π·ΠΈ ΡΡΠ°ΡΠΈΡ ΡΠ°Π·Π³Π»Π΅ΠΆΠ΄Π°ΠΌΠ΅ ΡΠ΅ΠΌΠ΅ΠΉΡΡΠ²ΠΎΡΠΎ ΠΎΡ ΡΡΠ½ΠΊΡΠΈΠΈ unnest_*(), ΠΊΠΎΠΈΡΠΎ ΡΠ° Π½Π°ΡΠΎΡΠ΅Π½ΠΈ ΠΊΡΠΌ ΡΠ°Π±ΠΎΡΠ° Ρ ΠΈΠ·Π²Π»ΠΈΡΠ°Π½Π΅ΡΠΎ Π½Π° Π΅Π»Π΅ΠΌΠ΅Π½ΡΠΈ ΠΎΡ Π²Π»ΠΎΠΆΠ΅Π½ΠΈ ΡΠΏΠΈΡΡΡΠΈ. Π’ΠΎΠ·ΠΈ ΠΏΠ°ΠΊΠ΅Ρ ΡΡΠ΄ΡΡΠΆΠ° ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²ΠΎ Π΄ΡΡΠ³ΠΈ ΠΏΠΎΠ»Π΅Π·Π½ΠΈ ΡΡΠ½ΠΊΡΠΈΠΈ, ΠΊΠΎΠΈΡΠΎ ΠΎΠΏΡΠΎΡΡΡΠ²Π°Ρ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΡΠ²Π°Π½Π΅ΡΠΎ Π½Π° Π΄Π°Π½Π½ΠΈ ΡΡΠ³Π»Π°ΡΠ½ΠΎ ΠΊΠΎΠ½ΡΠ΅ΠΏΡΠΈΡΡΠ° Π·Π° ΠΠΎΠ΄ΡΠ΅Π΄Π΅Π½ΠΈ Π΄Π°Π½Π½ΠΈ.
ΠΠ·ΡΠΎΡΠ½ΠΈΠΊ: habr.com
