เจจเฉ‡เจธเจŸเจก เจ•เจพเจฒเจฎเจพเจ‚ เจฆเจพ เจตเจฟเจธเจคเจพเจฐ เจ•เจฐเจจเจพ - R เจญเจพเจธเจผเจพ เจฆเฉ€ เจตเจฐเจคเฉ‹เจ‚ เจ•เจฐเจฆเฉ‡ เจนเฉ‹เจ เจธเฉ‚เจšเฉ€เจ†เจ‚ (เจŸเจพเจ‡เจกเจฐ เจชเฉˆเจ•เฉ‡เจœ เจ…เจคเฉ‡ เจ…เจจเจธเจŸเจก เจชเจฐเจฟเจตเจพเจฐ เจฆเฉ‡ เจซเฉฐเจ•เจธเจผเจจ)

เจœเจผเจฟเจ†เจฆเจพเจคเจฐ เจฎเจพเจฎเจฒเจฟเจ†เจ‚ เจตเจฟเฉฑเจš, เจœเจฆเฉ‹เจ‚ เจ‡เฉฑเจ• API เจคเฉ‹เจ‚ เจชเฉเจฐเจพเจชเจค เจœเจตเจพเจฌ, เจœเจพเจ‚ เจ•เจฟเจธเฉ‡ เจนเฉ‹เจฐ เจกเฉ‡เจŸเจพ เจœเจฟเจธ เจตเจฟเฉฑเจš เจ‡เฉฑเจ• เจ—เฉเฉฐเจเจฒเจฆเจพเจฐ เจฐเฉเฉฑเจ– เจฌเจฃเจคเจฐ เจนเฉˆ, เจฆเฉ‡ เจจเจพเจฒ เจ•เฉฐเจฎ เจ•เจฐเจฆเฉ‡ เจธเจฎเฉ‡เจ‚, เจคเฉเจนเจพเจจเฉ‚เฉฐ JSON เจ…เจคเฉ‡ XML เจซเจพเจฐเจฎเฉˆเจŸเจพเจ‚ เจฆเจพ เจธเจพเจนเจฎเจฃเจพ เจ•เจฐเจจเจพ เจชเฉˆเจ‚เจฆเจพ เจนเฉˆเฅค

เจ‡เจนเจจเจพเจ‚ เจซเจพเจฐเจฎเฉˆเจŸเจพเจ‚ เจฆเฉ‡ เจฌเจนเฉเจค เจธเจพเจฐเฉ‡ เจซเจพเจ‡เจฆเฉ‡ เจนเจจ: เจ‰เจน เจกเฉ‡เจŸเจพ เจจเฉ‚เฉฐ เจ•เจพเจซเจผเฉ€ เจธเฉฐเจ–เฉ‡เจช เจฐเฉ‚เจช เจตเจฟเฉฑเจš เจธเจŸเฉ‹เจฐ เจ•เจฐเจฆเฉ‡ เจนเจจ เจ…เจคเฉ‡ เจคเฉเจนเจพเจจเฉ‚เฉฐ เจœเจพเจฃเจ•เจพเจฐเฉ€ เจฆเฉ€ เจฌเฉ‡เจฒเฉ‹เฉœเฉ€ เจจเจ•เจฒ เจคเฉ‹เจ‚ เจฌเจšเจฃ เจฆเฉ€ เจ‡เจœเจพเจœเจผเจค เจฆเจฟเฉฐเจฆเฉ‡ เจนเจจเฅค

เจ‡เจนเจจเจพเจ‚ เจซเจพเจฐเจฎเฉˆเจŸเจพเจ‚ เจฆเจพ เจจเฉเจ•เจธเจพเจจ เจ‰เจนเจจเจพเจ‚ เจฆเฉ€ เจชเฉเจฐเจ•เจฟเจฐเจฟเจ† เจ…เจคเฉ‡ เจตเจฟเจธเจผเจฒเฉ‡เจธเจผเจฃ เจฆเฉ€ เจ—เฉเฉฐเจเจฒเจคเจพ เจนเฉˆ. เจ—เฉˆเจฐ-เจธเฉฐเจ—เจ เจฟเจค เจกเฉ‡เจŸเจพ เจจเฉ‚เฉฐ เจ—เจฃเจจเจพเจตเจพเจ‚ เจตเจฟเฉฑเจš เจตเจฐเจคเจฟเจ† เจจเจนเฉ€เจ‚ เจœเจพ เจธเจ•เจฆเจพ เจนเฉˆ เจ…เจคเฉ‡ เจ‡เจธ เจ‰เฉฑเจคเฉ‡ เจตเจฟเจœเจผเฉ‚เจ…เจฒเจพเจˆเจœเจผเฉ‡เจธเจผเจจ เจจเจนเฉ€เจ‚ เจฌเจฃเจพเจ‡เจ† เจœเจพ เจธเจ•เจฆเจพ เจนเฉˆเฅค

เจจเฉ‡เจธเจŸเจก เจ•เจพเจฒเจฎเจพเจ‚ เจฆเจพ เจตเจฟเจธเจคเจพเจฐ เจ•เจฐเจจเจพ - R เจญเจพเจธเจผเจพ เจฆเฉ€ เจตเจฐเจคเฉ‹เจ‚ เจ•เจฐเจฆเฉ‡ เจนเฉ‹เจ เจธเฉ‚เจšเฉ€เจ†เจ‚ (เจŸเจพเจ‡เจกเจฐ เจชเฉˆเจ•เฉ‡เจœ เจ…เจคเฉ‡ เจ…เจจเจธเจŸเจก เจชเจฐเจฟเจตเจพเจฐ เจฆเฉ‡ เจซเฉฐเจ•เจธเจผเจจ)

เจ‡เจน เจฒเฉ‡เจ– เจชเฉเจฐเจ•เจพเจธเจผเจจ เจฆเฉ€ เจ‡เฉฑเจ• เจคเจฐเจ•เจชเฉ‚เจฐเจจ เจจเจฟเจฐเฉฐเจคเจฐเจคเจพ เจนเฉˆ "เจ†เจฐ เจชเฉˆเจ•เฉ‡เจœ tidyr เจ…เจคเฉ‡ เจ‡เจธเจฆเฉ‡ เจจเจตเฉ‡เจ‚ เจซเฉฐเจ•เจธเจผเจจ pivot_longer เจ…เจคเฉ‡ pivot_wider". เจ‡เจน เจชเฉˆเจ•เฉ‡เจœ เจฆเฉ€ เจตเจฐเจคเฉ‹เจ‚ เจ•เจฐเจฆเฉ‡ เจนเฉ‹เจ เจตเจฟเจธเจผเจฒเฉ‡เจธเจผเจฃ เจธเจพเจฐเจฃเฉ€ เจฆเฉ‡ เจฐเฉ‚เจช เจตเจฟเฉฑเจš เจ‡เฉฑเจ• เจœเจพเจฃเฉ‡-เจชเจ›เจพเจฃเฉ‡ เจ…เจคเฉ‡ เจขเฉเจ•เจตเฉ‡เจ‚ เจฐเฉ‚เจช เจตเจฟเฉฑเจš เจ—เฉˆเจฐ-เจธเฉฐเจ—เจ เจฟเจค เจกเฉ‡เจŸเจพ เจขเจพเจ‚เจšเฉ‡ เจจเฉ‚เฉฐ เจฒเจฟเจ†เจ‰เจฃ เจตเจฟเฉฑเจš เจคเฉเจนเจพเจกเฉ€ เจฎเจฆเจฆ เจ•เจฐเฉ‡เจ—เจพเฅค tidyr, เจฒเจพเจ‡เจฌเฉเจฐเฉ‡เจฐเฉ€ เจฆเฉ‡ เจ•เฉ‹เจฐ เจตเจฟเฉฑเจš เจธเจผเจพเจฎเจฒ เจนเฉˆ tidyverse, เจ…เจคเฉ‡ เจ‡เจธเจฆเฉ‡ เจ•เจพเจฐเจœเจพเจ‚ เจฆเจพ เจชเจฐเจฟเจตเจพเจฐ unnest_*().

เจธเจฎเฉฑเจ—เจฐเฉ€

เจœเฉ‡ เจคเฉเจธเฉ€เจ‚ เจกเฉ‡เจŸเจพ เจตเจฟเจธเจผเจฒเฉ‡เจธเจผเจฃ เจตเจฟเฉฑเจš เจฆเจฟเจฒเจšเจธเจชเฉ€ เจฐเฉฑเจ–เจฆเฉ‡ เจนเฉ‹, เจคเจพเจ‚ เจคเฉเจนเจพเจจเฉ‚เฉฐ เจฎเฉ‡เจฐเฉ‡ เจตเจฟเฉฑเจš เจฆเจฟเจฒเจšเจธเจชเฉ€ เจนเฉ‹ เจธเจ•เจฆเฉ€ เจนเฉˆ เจคเจพเจฐ ะธ YouTube เจšเฉˆเจจเจฒเฅค เจœเจผเจฟเจ†เจฆเจพเจคเจฐ เจธเจฎเฉฑเจ—เจฐเฉ€ เจ†เจฐ เจญเจพเจธเจผเจพ เจจเฉ‚เฉฐ เจธเจฎเจฐเจชเจฟเจค เจนเฉˆเฅค

  1. เจœเจพเจฃ เจชเจ›เจพเจฃ
  2. GitHub เจ‰เจชเจญเฉ‹เจ—เจคเจพ
  3. Github เจฐเจฟเจชเฉ‹เจœเจผเจŸเจฐเฉ€เจ†เจ‚
  4. เจ—เฉ‡เจฎ เจ†เจซเจผ เจฅเฉเจฐเฉ‹เจจเจธ เจฆเฉ‡ เจ•เจฟเจฐเจฆเจพเจฐ
  5. เจ—เฉ‚เจ—เจฒ เจฆเฉ‡ เจจเจพเจฒ เจœเฉ€เจ“เจ•เฉ‹เจกเจฟเฉฐเจ—
  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_users, เจ‡เฉฑเจ• เจธเฉ‚เจšเฉ€ เจœเจฟเจธ เจตเจฟเฉฑเจš เจ›เฉ‡ GitHub เจ‰เจชเจญเฉ‹เจ—เจคเจพเจตเจพเจ‚ เจฌเจพเจฐเฉ‡ เจœเจพเจฃเจ•เจพเจฐเฉ€ เจธเจผเจพเจฎเจฒ เจนเฉˆเฅค เจชเจนเจฟเจฒเจพเจ‚ เจ†เจ“ เจธเฉ‚เจšเฉ€ เจจเฉ‚เฉฐ เจฌเจฆเจฒเฉ€เจ gh_users ะฒ เจŸเจฟเจฌเจฒ เจซเจฐเฉ‡เจฎ:

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

เจ—เฉ‡เจฎ เจ†เจซเจผ เจฅเฉเจฐเฉ‹เจจเจธ เจฆเฉ‡ เจ•เจฟเจฐเจฆเจพเจฐ

got_chars เจฒเจˆ เจ‡เฉฑเจ• เจธเจฎเจพเจจ เจฌเจฃเจคเจฐ เจนเฉˆ gh_users: เจ‡เจน เจจเจพเจฎเจฟเจค เจธเฉ‚เจšเฉ€เจ†เจ‚ เจฆเจพ เจ‡เฉฑเจ• เจธเจฎเฉ‚เจน เจนเฉˆ, เจœเจฟเฉฑเจฅเฉ‡ เจ…เฉฐเจฆเจฐเฉ‚เจจเฉ€ เจธเฉ‚เจšเฉ€ เจฆเจพ เจนเจฐเฉ‡เจ• เจคเฉฑเจค เจ—เฉ‡เจฎ เจ†เจซเจผ เจฅเฉเจฐเฉ‹เจจเจธ เจฆเฉ‡ เจ…เฉฑเจ–เจฐ เจฆเฉ‡ เจ•เฉเจ เจ—เฉเจฃเจพเจ‚ เจฆเจพ เจตเจฐเจฃเจจ เจ•เจฐเจฆเจพ เจนเฉˆเฅค เจฒเจฟเจ†เจ‰เจฃเจพ 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 เจจเจ•เจธเจผเฉ‡ API เจฆเฉ‡ เจจเจพเจฒ เจ•เฉฐเจฎ เจ•เจฐเจจ เจฆเฉ‡ เจจเจฟเจฏเจฎเจพเจ‚ เจฆเฉ‡ เจตเจฟเจฐเฉเฉฑเจง เจนเฉˆ, เจ‡เจธ เจฒเจˆ เจฎเฉˆเจ‚ เจชเจนเจฟเจฒเจพเจ‚ API เจฆเฉ‡ เจ†เจฒเฉ‡ เจฆเฉเจ†เจฒเฉ‡ เจ‡เฉฑเจ• เจธเจงเจพเจฐเจจ เจฐเฉˆเจชเจฐ เจฒเจฟเจ–เจพเจ‚เจ—เจพ. เจœเฉ‹ เจ•เจฟ เจตเจพเจคเจพเจตเจฐเจฃ เจตเฉ‡เจฐเฉ€เจเจฌเจฒ เจตเจฟเฉฑเจš เจ—เฉ‚เจ—เจฒ เจฎเฉˆเจชเจธ 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 เจ†เจฐ เจตเจฟเฉฑเจš เจ‰เจšเจฟเจค เจฎเจฟเจคเฉ€ เจ…เจคเฉ‡ เจธเจฎเฉ‡เจ‚ เจฆเฉ‡ เจซเจพเจฐเจฎเฉˆเจŸ เจตเจฟเฉฑเจš.

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 เจ†เจˆเจกเฉ€ เจ•เจพเจฒเจฎ เจจเฉ‚เฉฐ เจฆเฉเจนเจฐเจพเจ‰เจ‚เจฆเจพ เจนเฉˆ เจœเฉ‹ เจ•เจฟ เจธเจฟเจ–เจฐเจฒเฉ‡ เจชเฉฑเจงเจฐ 'เจคเฉ‡ เจตเฉ€ เจธเจŸเฉ‹เจฐ เจ•เฉ€เจคเจพ เจœเจพเจ‚เจฆเจพ เจนเฉˆ, เจ‡เจธ เจฒเจˆ เจ…เจธเฉ€เจ‚ เจ‡เจธเจจเฉ‚เฉฐ เจฌเจธ เจนเจŸเจพ เจธเจ•เจฆเฉ‡ เจนเจพเจ‚:

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

เจ‡เฉฑเจ• เจŸเจฟเฉฑเจชเจฃเฉ€ เจœเฉ‹เฉœเฉ‹