แƒฌแƒงแƒแƒ‘แƒ˜แƒšแƒ˜ แƒกแƒ•แƒ”แƒขแƒ”แƒ‘แƒ˜แƒก แƒ’แƒแƒคแƒแƒ แƒ—แƒแƒ”แƒ‘แƒ - แƒกแƒ˜แƒ”แƒ‘แƒ˜ R แƒ”แƒœแƒ˜แƒก แƒ’แƒแƒ›แƒแƒงแƒ”แƒœแƒ”แƒ‘แƒ˜แƒ— (tidyr แƒžแƒแƒ™แƒ”แƒขแƒ˜ แƒ“แƒ unnest แƒแƒฏแƒแƒฎแƒ˜แƒก แƒคแƒฃแƒœแƒฅแƒชแƒ˜แƒ”แƒ‘แƒ˜)

แƒฃแƒ›แƒ”แƒขแƒ”แƒก แƒจแƒ”แƒ›แƒ—แƒฎแƒ•แƒ”แƒ•แƒแƒจแƒ˜, API-แƒ“แƒแƒœ แƒ›แƒ˜แƒฆแƒ”แƒ‘แƒฃแƒš แƒžแƒแƒกแƒฃแƒฎแƒ—แƒแƒœ แƒแƒœ แƒœแƒ”แƒ‘แƒ˜แƒกแƒ›แƒ˜แƒ”แƒ  แƒกแƒฎแƒ•แƒ แƒ›แƒแƒœแƒแƒชแƒ”แƒ›แƒ—แƒแƒœ แƒ›แƒฃแƒจแƒแƒแƒ‘แƒ˜แƒกแƒแƒก, แƒ แƒแƒ›แƒ”แƒšแƒกแƒแƒช แƒแƒฅแƒ•แƒก แƒ แƒ—แƒฃแƒšแƒ˜ แƒฎแƒ˜แƒก แƒกแƒขแƒ แƒฃแƒฅแƒขแƒฃแƒ แƒ, แƒ—แƒฅแƒ•แƒ”แƒœ แƒฌแƒ˜แƒœแƒแƒจแƒ” แƒ“แƒ’แƒแƒฎแƒแƒ แƒ— JSON แƒ“แƒ XML แƒคแƒแƒ แƒ›แƒแƒขแƒ”แƒ‘แƒ—แƒแƒœ.

แƒแƒ› แƒคแƒแƒ แƒ›แƒแƒขแƒ”แƒ‘แƒก แƒ‘แƒ”แƒ•แƒ แƒ˜ แƒฃแƒžแƒ˜แƒ แƒแƒขแƒ”แƒกแƒแƒ‘แƒ แƒแƒฅแƒ•แƒ—: แƒ˜แƒกแƒ˜แƒœแƒ˜ แƒกแƒแƒ™แƒ›แƒแƒแƒ“ แƒ™แƒแƒ›แƒžแƒแƒฅแƒขแƒฃแƒ แƒแƒ“ แƒ˜แƒœแƒแƒฎแƒแƒ•แƒ”แƒœ แƒ›แƒแƒœแƒแƒชแƒ”แƒ›แƒ”แƒ‘แƒก แƒ“แƒ แƒกแƒแƒจแƒฃแƒแƒšแƒ”แƒ‘แƒแƒก แƒ’แƒแƒซแƒšแƒ”แƒ•แƒ— แƒ—แƒแƒ•แƒ˜แƒ“แƒแƒœ แƒแƒ˜แƒชแƒ˜แƒšแƒแƒ— แƒ˜แƒœแƒคแƒแƒ แƒ›แƒแƒชแƒ˜แƒ˜แƒก แƒแƒ แƒแƒกแƒแƒญแƒ˜แƒ แƒ แƒ“แƒฃแƒ‘แƒšแƒ˜แƒ แƒ”แƒ‘แƒ.

แƒแƒ› แƒคแƒแƒ แƒ›แƒแƒขแƒ”แƒ‘แƒ˜แƒก แƒ›แƒ˜แƒœแƒฃแƒกแƒ˜ แƒแƒ แƒ˜แƒก แƒ›แƒแƒ—แƒ˜ แƒ“แƒแƒ›แƒฃแƒจแƒแƒ•แƒ”แƒ‘แƒ˜แƒกแƒ แƒ“แƒ แƒแƒœแƒแƒšแƒ˜แƒ–แƒ˜แƒก แƒกแƒ˜แƒ แƒ—แƒฃแƒšแƒ”. แƒแƒ แƒแƒกแƒขแƒ แƒฃแƒฅแƒขแƒฃแƒ แƒ˜แƒ แƒ”แƒ‘แƒฃแƒšแƒ˜ แƒ›แƒแƒœแƒแƒชแƒ”แƒ›แƒ”แƒ‘แƒ˜ แƒแƒ  แƒจแƒ”แƒ˜แƒซแƒšแƒ”แƒ‘แƒ แƒ’แƒแƒ›แƒแƒงแƒ”แƒœแƒ”แƒ‘แƒฃแƒš แƒ˜แƒฅแƒœแƒแƒก แƒ’แƒแƒ›แƒแƒ—แƒ•แƒšแƒ”แƒ‘แƒจแƒ˜ แƒ“แƒ แƒ•แƒ˜แƒ–แƒฃแƒแƒšแƒ˜แƒ–แƒแƒชแƒ˜แƒ แƒแƒ  แƒจแƒ”แƒ˜แƒซแƒšแƒ”แƒ‘แƒ แƒ›แƒแƒกแƒ–แƒ” แƒแƒ’แƒ”แƒ‘แƒฃแƒšแƒ˜.

แƒฌแƒงแƒแƒ‘แƒ˜แƒšแƒ˜ แƒกแƒ•แƒ”แƒขแƒ”แƒ‘แƒ˜แƒก แƒ’แƒแƒคแƒแƒ แƒ—แƒแƒ”แƒ‘แƒ - แƒกแƒ˜แƒ”แƒ‘แƒ˜ R แƒ”แƒœแƒ˜แƒก แƒ’แƒแƒ›แƒแƒงแƒ”แƒœแƒ”แƒ‘แƒ˜แƒ— (tidyr แƒžแƒแƒ™แƒ”แƒขแƒ˜ แƒ“แƒ unnest แƒแƒฏแƒแƒฎแƒ˜แƒก แƒคแƒฃแƒœแƒฅแƒชแƒ˜แƒ”แƒ‘แƒ˜)

แƒ”แƒก แƒกแƒขแƒแƒขแƒ˜แƒ แƒแƒ แƒ˜แƒก แƒžแƒฃแƒ‘แƒšแƒ˜แƒ™แƒแƒชแƒ˜แƒ˜แƒก แƒšแƒแƒ’แƒ˜แƒ™แƒฃแƒ แƒ˜ แƒ’แƒแƒ’แƒ แƒซแƒ”แƒšแƒ”แƒ‘แƒ "R แƒžแƒแƒ™แƒ”แƒขแƒ˜ tidyr แƒ“แƒ แƒ›แƒ˜แƒกแƒ˜ แƒแƒฎแƒแƒšแƒ˜ แƒคแƒฃแƒœแƒฅแƒชแƒ˜แƒ”แƒ‘แƒ˜ pivot_longer แƒ“แƒ pivot_wider". แƒ”แƒก แƒ“แƒแƒ’แƒ”แƒฎแƒ›แƒแƒ แƒ”แƒ‘แƒแƒ— แƒจแƒ”แƒ˜แƒงแƒ•แƒแƒœแƒแƒ— แƒแƒ แƒแƒกแƒขแƒ แƒฃแƒฅแƒขแƒฃแƒ แƒ˜แƒ แƒ”แƒ‘แƒฃแƒšแƒ˜ แƒ›แƒแƒœแƒแƒชแƒ”แƒ›แƒ—แƒ แƒกแƒขแƒ แƒฃแƒฅแƒขแƒฃแƒ แƒ”แƒ‘แƒ˜ แƒœแƒแƒชแƒœแƒแƒ‘ แƒ“แƒ แƒจแƒ”แƒกแƒแƒคแƒ”แƒ แƒ˜แƒก แƒแƒœแƒแƒšแƒ˜แƒ–แƒ˜แƒกแƒ—แƒ•แƒ˜แƒก แƒชแƒฎแƒ แƒ˜แƒšแƒ˜แƒก แƒคแƒแƒ แƒ›แƒแƒจแƒ˜ แƒžแƒแƒ™แƒ”แƒขแƒ˜แƒก แƒ’แƒแƒ›แƒแƒงแƒ”แƒœแƒ”แƒ‘แƒ˜แƒ— tidyr, แƒจแƒ”แƒ“แƒ˜แƒก แƒ‘แƒ˜แƒ‘แƒšแƒ˜แƒแƒ—แƒ”แƒ™แƒ˜แƒก แƒ‘แƒ˜แƒ แƒ—แƒ•แƒจแƒ˜ tidyverseแƒ“แƒ แƒ›แƒ˜แƒกแƒ˜ แƒคแƒฃแƒœแƒฅแƒชแƒ˜แƒ”แƒ‘แƒ˜แƒก แƒแƒฏแƒแƒฎแƒ˜ unnest_*().

แƒ˜แƒœแƒคแƒแƒ แƒ›แƒแƒชแƒ˜แƒ˜แƒก

แƒ—แƒฃ แƒ’แƒแƒ˜แƒœแƒขแƒ”แƒ แƒ”แƒกแƒ”แƒ‘แƒ— แƒ›แƒแƒœแƒแƒชแƒ”แƒ›แƒ—แƒ แƒแƒœแƒแƒšแƒ˜แƒ–แƒ˜, แƒจแƒ”แƒ˜แƒซแƒšแƒ”แƒ‘แƒ แƒ“แƒแƒ’แƒแƒ˜แƒœแƒขแƒ”แƒ แƒ”แƒกแƒแƒ— แƒฉแƒ”แƒ›แƒ˜ แƒ“แƒ”แƒžแƒ”แƒจแƒ ะธ youtube แƒแƒ แƒฎแƒ”แƒ‘แƒ˜. แƒจแƒ˜แƒœแƒแƒแƒ แƒกแƒ˜แƒก แƒฃแƒ›แƒ”แƒขแƒ”แƒกแƒ˜ แƒœแƒแƒฌแƒ˜แƒšแƒ˜ แƒ”แƒซแƒฆแƒ•แƒœแƒ”แƒ‘แƒ R แƒ”แƒœแƒแƒก.

  1. แƒจแƒ”แƒกแƒแƒ•แƒแƒšแƒ˜
  2. GitHub แƒ›แƒแƒ›แƒฎแƒ›แƒแƒ แƒ”แƒ‘แƒšแƒ”แƒ‘แƒ˜
  3. Github แƒกแƒแƒชแƒแƒ•แƒ”แƒ‘แƒ˜
  4. Game of Thrones-แƒ˜แƒก แƒ’แƒ›แƒ˜แƒ แƒ”แƒ‘แƒ˜
  5. แƒ’แƒ”แƒแƒ™แƒแƒ“แƒ˜แƒ แƒ”แƒ‘แƒ Google-แƒ˜แƒ—
  6. แƒจแƒแƒ แƒšแƒ แƒ’แƒ”แƒšแƒคแƒแƒœแƒ“แƒ˜แƒก แƒ“แƒ˜แƒกแƒ™แƒแƒ’แƒ แƒแƒคแƒ˜แƒ
  7. แƒ“แƒแƒกแƒ™แƒ•แƒœแƒ

แƒจแƒ”แƒกแƒแƒ•แƒแƒšแƒ˜

แƒ›แƒแƒ แƒ—แƒ™แƒฃแƒ—แƒฎแƒ”แƒ“แƒ˜ (แƒ›แƒ—แƒแƒ แƒ’แƒ›แƒœแƒ”แƒšแƒ˜แƒก แƒจแƒ”แƒœแƒ˜แƒจแƒ•แƒœแƒ, แƒ›แƒ” แƒ•แƒ”แƒ  แƒ•แƒ˜แƒžแƒแƒ•แƒ” แƒแƒ› แƒขแƒ”แƒ แƒ›แƒ˜แƒœแƒ˜แƒก แƒแƒ“แƒ”แƒฅแƒ•แƒแƒขแƒฃแƒ แƒ˜ แƒ—แƒแƒ แƒ’แƒ›แƒแƒœแƒ˜แƒก แƒ•แƒแƒ แƒ˜แƒแƒœแƒขแƒ”แƒ‘แƒ˜, แƒแƒ›แƒ˜แƒขแƒแƒ› แƒ“แƒแƒ•แƒขแƒแƒ•แƒ”แƒ‘แƒ— แƒ›แƒแƒก แƒ˜แƒกแƒ”, แƒ แƒแƒ’แƒแƒ แƒช แƒแƒ แƒ˜แƒก.) แƒแƒ แƒ˜แƒก แƒแƒ แƒแƒกแƒขแƒ แƒฃแƒฅแƒขแƒฃแƒ แƒ˜แƒ แƒ”แƒ‘แƒฃแƒšแƒ˜ แƒ›แƒแƒœแƒแƒชแƒ”แƒ›แƒ”แƒ‘แƒ˜แƒก แƒฌแƒงแƒแƒ‘แƒ˜แƒšแƒ˜ แƒ›แƒแƒกแƒ˜แƒ•แƒ”แƒ‘แƒ˜แƒ— แƒ›แƒแƒขแƒแƒœแƒ˜แƒก แƒžแƒ แƒแƒชแƒ”แƒกแƒ˜ แƒแƒ แƒ’แƒแƒœแƒ–แƒแƒ›แƒ˜แƒšแƒ”แƒ‘แƒ˜แƒแƒœ แƒชแƒฎแƒ แƒ˜แƒšแƒจแƒ˜, แƒ แƒแƒ›แƒ”แƒšแƒ˜แƒช แƒจแƒ”แƒ“แƒ’แƒ”แƒ‘แƒ แƒœแƒแƒชแƒœแƒแƒ‘แƒ˜ แƒกแƒขแƒ แƒ˜แƒฅแƒแƒœแƒ”แƒ‘แƒ˜แƒกแƒ แƒ“แƒ แƒกแƒ•แƒ”แƒขแƒ”แƒ‘แƒ˜แƒกแƒ’แƒแƒœ. IN 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_แƒ›แƒแƒ›แƒฎแƒ›แƒแƒ แƒ”แƒ‘แƒšแƒ”แƒ‘แƒ˜แƒกแƒ˜แƒ, แƒ แƒแƒ›แƒ”แƒšแƒ˜แƒช แƒจแƒ”แƒ˜แƒชแƒแƒ•แƒก แƒ˜แƒœแƒคแƒแƒ แƒ›แƒแƒชแƒ˜แƒแƒก GitHub-แƒ˜แƒก แƒ”แƒฅแƒ•แƒกแƒ˜ แƒ›แƒแƒ›แƒฎแƒ›แƒแƒ แƒ”แƒ‘แƒšแƒ˜แƒก แƒจแƒ”แƒกแƒแƒฎแƒ”แƒ‘. แƒฏแƒ”แƒ  แƒจแƒ”แƒ•แƒชแƒ•แƒแƒšแƒแƒ— แƒกแƒ˜แƒ gh_แƒ›แƒแƒ›แƒฎแƒ›แƒแƒ แƒ”แƒ‘แƒšแƒ”แƒ‘แƒ˜ ะฒ แƒขแƒ˜แƒ‘แƒšแƒ˜ แƒฉแƒแƒ แƒฉแƒ:

users <-   tibble( user = gh_users ) 

แƒ”แƒก แƒชแƒแƒขแƒ แƒกแƒแƒฌแƒ˜แƒœแƒแƒแƒฆแƒ›แƒ“แƒ”แƒ’แƒแƒ“ แƒ’แƒแƒ›แƒแƒ˜แƒงแƒฃแƒ แƒ”แƒ‘แƒ: แƒ แƒแƒขแƒแƒ› แƒ›แƒ˜แƒแƒฌแƒแƒ“แƒ”แƒ— แƒกแƒ˜แƒ gh_แƒ›แƒแƒ›แƒฎแƒ›แƒแƒ แƒ”แƒ‘แƒšแƒ”แƒ‘แƒ˜แƒฃแƒคแƒ แƒ แƒ แƒ—แƒฃแƒš แƒ›แƒแƒœแƒแƒชแƒ”แƒ›แƒ—แƒ แƒกแƒขแƒ แƒฃแƒฅแƒขแƒฃแƒ แƒแƒก? แƒ›แƒแƒ’แƒ แƒแƒ› แƒ›แƒแƒœแƒแƒชแƒ”แƒ›แƒ—แƒ แƒฉแƒแƒ แƒฉแƒแƒก แƒ“แƒ˜แƒ“แƒ˜ แƒฃแƒžแƒ˜แƒ แƒแƒขแƒ”แƒกแƒแƒ‘แƒ แƒแƒฅแƒ•แƒก: แƒ˜แƒก แƒแƒ”แƒ แƒ—แƒ˜แƒแƒœแƒ”แƒ‘แƒก แƒ›แƒ แƒแƒ•แƒแƒš แƒ•แƒ”แƒฅแƒขแƒแƒ แƒก แƒ˜แƒกแƒ”, แƒ แƒแƒ› แƒงแƒ•แƒ”แƒšแƒแƒคแƒ”แƒ แƒก แƒ—แƒ•แƒแƒšแƒงแƒฃแƒ แƒก แƒแƒ“แƒ”แƒ•แƒœแƒ”แƒ‘แƒ”แƒœ แƒ”แƒ แƒ— แƒแƒ‘แƒ˜แƒ”แƒฅแƒขแƒจแƒ˜.

แƒ—แƒ˜แƒ—แƒแƒ”แƒฃแƒšแƒ˜ แƒแƒ‘แƒ˜แƒ”แƒฅแƒขแƒ˜แƒก แƒ”แƒšแƒ”แƒ›แƒ”แƒœแƒขแƒ˜ 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() แƒกแƒแƒจแƒฃแƒแƒšแƒ”แƒ‘แƒแƒก แƒ’แƒ•แƒแƒซแƒšแƒ”แƒ•แƒก แƒแƒ›แƒแƒ•แƒ˜แƒขแƒแƒœแƒแƒ— แƒจแƒ”แƒ แƒฉแƒ”แƒฃแƒšแƒ˜ แƒ™แƒแƒ›แƒžแƒแƒœแƒ”แƒœแƒขแƒ”แƒ‘แƒ˜ แƒ˜แƒ›แƒแƒ•แƒ” แƒกแƒ˜แƒœแƒขแƒแƒฅแƒกแƒ˜แƒก แƒ’แƒแƒ›แƒแƒงแƒ”แƒœแƒ”แƒ‘แƒ˜แƒ—, แƒ แƒแƒ’แƒแƒ แƒช 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]>

แƒแƒ›แƒฏแƒ”แƒ แƒแƒ“ แƒ”แƒšแƒ”แƒ›แƒ”แƒœแƒขแƒ”แƒ‘แƒ˜ แƒ›แƒแƒ›แƒฎแƒ›แƒแƒ แƒ”แƒ‘แƒ”แƒšแƒ˜ แƒฌแƒแƒ แƒ›แƒแƒแƒ“แƒ’แƒ”แƒœแƒก แƒแƒ› แƒ›แƒแƒ›แƒฎแƒ›แƒแƒ แƒ”แƒ‘แƒšแƒ˜แƒก แƒกแƒแƒ™แƒฃแƒ—แƒ แƒ”แƒ‘แƒแƒจแƒ˜ แƒแƒ แƒกแƒ”แƒ‘แƒฃแƒšแƒ˜ แƒกแƒแƒชแƒแƒ•แƒ”แƒ‘แƒ˜แƒก แƒกแƒ˜แƒแƒก. แƒ—แƒ˜แƒ—แƒแƒ”แƒฃแƒšแƒ˜ แƒกแƒแƒชแƒแƒ•แƒ˜ แƒแƒ แƒ˜แƒก แƒชแƒแƒšแƒ™แƒ” แƒ“แƒแƒ™แƒ•แƒ˜แƒ แƒ•แƒ”แƒ‘แƒ, แƒแƒกแƒ” แƒ แƒแƒ›, แƒกแƒ˜แƒกแƒฃแƒคแƒ—แƒแƒ•แƒ” แƒ›แƒแƒœแƒแƒชแƒ”แƒ›แƒ”แƒ‘แƒ˜แƒก แƒ™แƒแƒœแƒชแƒ”แƒคแƒชแƒ˜แƒ˜แƒก แƒ›แƒ˜แƒฎแƒ”แƒ“แƒ•แƒ˜แƒ— (แƒ“แƒแƒแƒฎแƒšแƒแƒ”แƒ‘แƒ˜แƒ— แƒ›แƒแƒฌแƒ”แƒกแƒ แƒ˜แƒ’แƒ”แƒ‘แƒฃแƒšแƒ˜ แƒ›แƒแƒœแƒแƒชแƒ”แƒ›แƒ”แƒ‘แƒ˜) แƒ˜แƒกแƒ˜แƒœแƒ˜ แƒฃแƒœแƒ“แƒ แƒ’แƒแƒฎแƒ“แƒ”แƒก แƒแƒฎแƒแƒšแƒ˜ แƒฎแƒแƒ–แƒ”แƒ‘แƒ˜, แƒ แƒ˜แƒก แƒ’แƒแƒ›แƒแƒช แƒฉแƒ•แƒ”แƒœ แƒ•แƒ˜แƒงแƒ”แƒœแƒ”แƒ‘แƒ— 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"): แƒ”แƒก แƒกแƒแƒจแƒฃแƒแƒšแƒ”แƒ‘แƒแƒก แƒ’แƒ•แƒแƒซแƒšแƒ”แƒ•แƒก แƒ›แƒ˜แƒ•แƒ˜แƒฆแƒแƒ— แƒ›แƒ”แƒแƒ แƒ” แƒ“แƒแƒœแƒ˜แƒก แƒ›แƒœแƒ˜แƒจแƒ•แƒœแƒ”แƒšแƒแƒ‘แƒ แƒฉแƒแƒ“แƒ’แƒ›แƒฃแƒšแƒ˜ แƒกแƒ˜แƒ˜แƒ“แƒแƒœ owner. แƒแƒšแƒขแƒ”แƒ แƒœแƒแƒขแƒ˜แƒฃแƒšแƒ˜ แƒ›แƒ˜แƒ“แƒ’แƒแƒ›แƒ แƒแƒ แƒ˜แƒก แƒ›แƒ—แƒ”แƒšแƒ˜ แƒกแƒ˜แƒ˜แƒก แƒ›แƒ˜แƒฆแƒ”แƒ‘แƒ owner แƒ“แƒ แƒจแƒ”แƒ›แƒ“แƒ”แƒ’ แƒคแƒฃแƒœแƒฅแƒชแƒ˜แƒ˜แƒก แƒ’แƒแƒ›แƒแƒงแƒ”แƒœแƒ”แƒ‘แƒ˜แƒ— 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(). แƒ”แƒก แƒคแƒฃแƒœแƒฅแƒชแƒ˜แƒ แƒ˜แƒงแƒ”แƒœแƒ”แƒ‘แƒก แƒ แƒแƒ›แƒ“แƒ”แƒœแƒ˜แƒ›แƒ” แƒ”แƒ•แƒ แƒ˜แƒกแƒขแƒ˜แƒ™แƒฃแƒš แƒ›แƒ”แƒ—แƒแƒ“แƒก แƒ›แƒแƒœแƒแƒชแƒ”แƒ›แƒ—แƒ แƒขแƒ แƒแƒœแƒกแƒคแƒแƒ แƒ›แƒแƒชแƒ˜แƒ˜แƒกแƒ—แƒ•แƒ˜แƒก แƒงแƒ•แƒ”แƒšแƒแƒ–แƒ” แƒจแƒ”แƒกแƒแƒคแƒ”แƒ แƒ˜แƒกแƒ˜ แƒคแƒฃแƒœแƒฅแƒชแƒ˜แƒ˜แƒก แƒจแƒ”แƒกแƒแƒ แƒฉแƒ”แƒ•แƒแƒ“ แƒ“แƒ แƒแƒฉแƒ•แƒ”แƒœแƒ”แƒ‘แƒก แƒจแƒ”แƒขแƒงแƒแƒ‘แƒ˜แƒœแƒ”แƒ‘แƒแƒก แƒแƒ แƒฉแƒ”แƒฃแƒšแƒ˜ แƒ›แƒ”แƒ—แƒแƒ“แƒ˜แƒก แƒจแƒ”แƒกแƒแƒฎแƒ”แƒ‘.

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 แƒกแƒ˜แƒ’แƒ แƒซแƒ˜แƒก แƒ•แƒ”แƒฅแƒขแƒแƒ แƒ˜ แƒ“แƒ แƒแƒ แƒ 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)
#> 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-แƒ˜แƒ—

แƒจแƒ”แƒ›แƒ“แƒ”แƒ’แƒ˜, แƒฉแƒ•แƒ”แƒœ แƒ’แƒแƒœแƒ•แƒ˜แƒฎแƒ˜แƒšแƒแƒ•แƒ— Google-แƒ˜แƒก แƒ’แƒ”แƒแƒ™แƒแƒ“แƒ˜แƒ แƒ”แƒ‘แƒ˜แƒก แƒกแƒ”แƒ แƒ•แƒ˜แƒกแƒ˜แƒ“แƒแƒœ แƒ›แƒ˜แƒฆแƒ”แƒ‘แƒฃแƒšแƒ˜ แƒ›แƒแƒœแƒแƒชแƒ”แƒ›แƒ”แƒ‘แƒ˜แƒก แƒฃแƒคแƒ แƒ แƒ แƒ—แƒฃแƒš แƒกแƒขแƒ แƒฃแƒฅแƒขแƒฃแƒ แƒแƒก. แƒ แƒฌแƒ›แƒฃแƒœแƒ”แƒ‘แƒแƒ—แƒ แƒกแƒ˜แƒ’แƒ”แƒšแƒ”แƒ‘แƒ˜แƒก แƒฅแƒ”แƒจแƒ˜แƒ แƒ”แƒ‘แƒ แƒ”แƒฌแƒ˜แƒœแƒแƒแƒฆแƒ›แƒ“แƒ”แƒ’แƒ”แƒ‘แƒ Google maps API-แƒกแƒ—แƒแƒœ แƒ›แƒฃแƒจแƒแƒแƒ‘แƒ˜แƒก แƒฌแƒ”แƒกแƒ”แƒ‘แƒก, แƒแƒ›แƒ˜แƒขแƒแƒ› แƒžแƒ˜แƒ แƒ•แƒ”แƒš แƒ แƒ˜แƒ’แƒจแƒ˜ แƒ“แƒแƒ•แƒฌแƒ”แƒ  API-แƒก แƒ˜แƒ แƒ’แƒ•แƒšแƒ˜แƒ• แƒ›แƒแƒ แƒขแƒ˜แƒ• แƒจแƒ”แƒคแƒฃแƒ—แƒ•แƒแƒก. แƒ แƒแƒ›แƒ”แƒšแƒ˜แƒช แƒ”แƒคแƒฃแƒซแƒœแƒ”แƒ‘แƒ 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 แƒ”แƒšแƒ”แƒ›แƒ”แƒœแƒขแƒ˜ (แƒ แƒแƒช แƒฌแƒแƒ แƒ›แƒแƒแƒ“แƒ’แƒ”แƒœแƒก แƒ’แƒ”แƒแƒ™แƒแƒ“แƒ˜แƒ แƒ”แƒ‘แƒ˜แƒก API-แƒก แƒจแƒ”แƒกแƒแƒ‘แƒแƒ›แƒ˜แƒกแƒ˜ แƒฃแƒœแƒ˜แƒ™แƒแƒšแƒฃแƒ  แƒ›แƒœแƒ˜แƒจแƒ•แƒœแƒ”แƒšแƒแƒ‘แƒแƒก), แƒ›แƒแƒ’แƒ แƒแƒ› แƒกแƒžแƒ แƒ˜แƒœแƒ’แƒคแƒ˜แƒšแƒ“แƒก แƒแƒฅแƒ•แƒก แƒแƒ แƒ˜. แƒฉแƒ•แƒ”แƒœ แƒจแƒ”แƒ’แƒ•แƒ˜แƒซแƒšแƒ˜แƒ แƒ’แƒแƒ•แƒ˜แƒงแƒ•แƒแƒœแƒแƒ— แƒ˜แƒกแƒ˜แƒœแƒ˜ แƒชแƒแƒšแƒ™แƒ”แƒฃแƒš แƒฎแƒแƒ–แƒ”แƒ‘แƒแƒ“ 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() แƒ›แƒ แƒแƒ•แƒแƒš แƒ“แƒแƒœแƒ˜แƒก แƒฉแƒแƒงแƒ•แƒ˜แƒœแƒ—แƒ•แƒ˜แƒกแƒ—แƒ•แƒ˜แƒก แƒžแƒ˜แƒ แƒ“แƒแƒžแƒ˜แƒ  แƒฌแƒแƒกแƒ•แƒšแƒแƒ–แƒ” 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]>

แƒจแƒแƒ แƒšแƒ แƒ’แƒ”แƒšแƒคแƒแƒœแƒ“แƒ˜แƒก แƒ“แƒ˜แƒกแƒ™แƒแƒ’แƒ แƒแƒคแƒ˜แƒ

แƒ‘แƒแƒšแƒแƒก แƒ™แƒ˜ แƒ’แƒแƒ“แƒแƒ•แƒฎแƒ”แƒ“แƒแƒ•แƒ— แƒงแƒ•แƒ”แƒšแƒแƒ–แƒ” แƒ แƒ—แƒฃแƒš แƒกแƒขแƒ แƒฃแƒฅแƒขแƒฃแƒ แƒแƒก - แƒจแƒแƒ แƒšแƒ แƒ’แƒ”แƒšแƒคแƒแƒœแƒ“แƒ˜แƒก แƒ“แƒ˜แƒกแƒ™แƒแƒ’แƒ แƒแƒคแƒ˜แƒแƒก. แƒ แƒแƒ’แƒแƒ แƒช แƒ–แƒ”แƒ›แƒแƒ— แƒ›แƒแƒชแƒ”แƒ›แƒฃแƒš แƒ›แƒแƒ’แƒแƒšแƒ˜แƒ—แƒ”แƒ‘แƒจแƒ˜, แƒฉแƒ•แƒ”แƒœ แƒ•แƒ˜แƒฌแƒงแƒ”แƒ‘แƒ— แƒกแƒ˜แƒ˜แƒก แƒ™แƒแƒœแƒ•แƒ”แƒ แƒขแƒ˜แƒ แƒ”แƒ‘แƒ˜แƒ— แƒ”แƒ แƒ—แƒกแƒ•แƒ”แƒขแƒ˜แƒแƒœ แƒ›แƒแƒœแƒแƒชแƒ”แƒ›แƒ—แƒ แƒฉแƒแƒ แƒฉแƒแƒจแƒ˜ แƒ“แƒ แƒจแƒ”แƒ›แƒ“แƒ”แƒ’ แƒ’แƒแƒ•แƒแƒคแƒแƒ แƒ—แƒแƒ•แƒ”แƒ‘แƒ— แƒ˜แƒกแƒ”, แƒ แƒแƒ› แƒ—แƒ˜แƒ—แƒแƒ”แƒฃแƒšแƒ˜ แƒ™แƒแƒ›แƒžแƒแƒœแƒ”แƒœแƒขแƒ˜ แƒ˜แƒงแƒแƒก แƒชแƒแƒšแƒ™แƒ” แƒกแƒ•แƒ”แƒขแƒ˜. แƒแƒกแƒ”แƒ•แƒ” แƒ•แƒแƒคแƒแƒ แƒ›แƒ”แƒ‘ แƒกแƒ•แƒ”แƒขแƒก 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

แƒแƒ› แƒ“แƒแƒœแƒ”แƒ–แƒ” แƒฉแƒ•แƒ”แƒœ แƒ•แƒ˜แƒฆแƒ”แƒ‘แƒ— แƒ˜แƒœแƒคแƒแƒ แƒ›แƒแƒชแƒ˜แƒแƒก แƒ˜แƒ›แƒ˜แƒก แƒจแƒ”แƒกแƒแƒฎแƒ”แƒ‘, แƒ—แƒฃ แƒ แƒแƒ“แƒ˜แƒก แƒ“แƒแƒ”แƒ›แƒแƒขแƒ แƒ—แƒ˜แƒ—แƒแƒ”แƒฃแƒšแƒ˜ แƒ“แƒ˜แƒกแƒ™แƒ˜ แƒจแƒแƒ แƒšแƒแƒก แƒ“แƒ˜แƒกแƒ™แƒแƒ’แƒ แƒแƒคแƒ˜แƒแƒก, แƒ›แƒแƒ’แƒ แƒแƒ› แƒฉแƒ•แƒ”แƒœ แƒ•แƒ”แƒ  แƒ•แƒฎแƒ”แƒ“แƒแƒ•แƒ— แƒ›แƒแƒœแƒแƒชแƒ”แƒ›แƒ”แƒ‘แƒก แƒแƒ› แƒ“แƒ˜แƒกแƒ™แƒ”แƒ‘แƒ˜แƒก แƒจแƒ”แƒกแƒแƒฎแƒ”แƒ‘. แƒแƒ›แƒ˜แƒกแƒแƒ—แƒ•แƒ˜แƒก แƒฉแƒ•แƒ”แƒœ แƒฃแƒœแƒ“แƒ แƒ’แƒแƒ•แƒแƒคแƒแƒ แƒ—แƒแƒ•แƒแƒ— แƒกแƒ•แƒ”แƒขแƒ˜ 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 แƒ˜แƒ›แƒ”แƒแƒ แƒ”แƒ‘แƒก id แƒกแƒ•แƒ”แƒขแƒก, แƒ แƒแƒ›แƒ”แƒšแƒ˜แƒช แƒแƒกแƒ”แƒ•แƒ” แƒ˜แƒœแƒแƒฎแƒ”แƒ‘แƒ แƒ–แƒ”แƒ“แƒ แƒ“แƒแƒœแƒ”แƒ–แƒ”, แƒแƒกแƒ” แƒ แƒแƒ›, แƒฉแƒ•แƒ”แƒœ แƒจแƒ”แƒ’แƒ•แƒ˜แƒซแƒšแƒ˜แƒ แƒฃแƒ‘แƒ แƒแƒšแƒแƒ“ แƒฌแƒแƒจแƒแƒšแƒแƒ— แƒ˜แƒ’แƒ˜:

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_*(), แƒ แƒแƒ›แƒšแƒ”แƒ‘แƒ˜แƒช แƒ›แƒ˜แƒ–แƒœแƒแƒ“ แƒ˜แƒกแƒแƒฎแƒแƒ•แƒก แƒฌแƒงแƒแƒ‘แƒ˜แƒšแƒ˜ แƒกแƒ˜แƒ”แƒ‘แƒ˜แƒ“แƒแƒœ แƒ”แƒšแƒ”แƒ›แƒ”แƒœแƒขแƒ”แƒ‘แƒ˜แƒก แƒแƒ›แƒแƒฆแƒ”แƒ‘แƒแƒ–แƒ” แƒ›แƒฃแƒจแƒแƒแƒ‘แƒแƒก. แƒ”แƒก แƒžแƒแƒ™แƒ”แƒขแƒ˜ แƒจแƒ”แƒ˜แƒชแƒแƒ•แƒก แƒ‘แƒ”แƒ•แƒ  แƒกแƒฎแƒ•แƒ แƒกแƒแƒกแƒแƒ แƒ’แƒ”แƒ‘แƒšแƒ แƒคแƒฃแƒœแƒฅแƒชแƒ˜แƒแƒก, แƒ แƒแƒช แƒแƒแƒ“แƒ•แƒ˜แƒšแƒ”แƒ‘แƒก แƒ›แƒแƒœแƒแƒชแƒ”แƒ›แƒ—แƒ แƒ™แƒแƒœแƒ•แƒ”แƒ แƒขแƒแƒชแƒ˜แƒแƒก แƒ™แƒแƒœแƒชแƒ”แƒคแƒชแƒ˜แƒ˜แƒก แƒ›แƒ˜แƒฎแƒ”แƒ“แƒ•แƒ˜แƒ— แƒ›แƒแƒฌแƒ”แƒกแƒ แƒ˜แƒ’แƒ”แƒ‘แƒฃแƒšแƒ˜ แƒ›แƒแƒœแƒแƒชแƒ”แƒ›แƒ”แƒ‘แƒ˜.

แƒฌแƒงแƒแƒ แƒ: www.habr.com

แƒแƒฎแƒแƒšแƒ˜ แƒ™แƒแƒ›แƒ”แƒœแƒขแƒแƒ แƒ˜แƒก แƒ“แƒแƒ›แƒแƒขแƒ”แƒ‘แƒ