เดจเต†เดธเตเดฑเตเดฑเดกเต เด•เต‹เดณเด™เตเด™เตพ เดตเดฟเด•เดธเดฟเดชเตเดชเดฟเด•เตเด•เตเดจเตเดจเต - R เดญเดพเดท เด‰เดชเดฏเต‹เด—เดฟเดšเตเดšเต เดฒเดฟเดธเตเดฑเตเดฑเตเด•เตพ (tidyr เดชเดพเด•เตเด•เต‡เดœเตเด‚ unnest เด•เตเดŸเตเด‚เดฌเดคเตเดคเดฟเดจเตเดฑเต† เดชเตเดฐเดตเตผเดคเตเดคเดจเด™เตเด™เดณเตเด‚)

เดฎเดฟเด•เตเด• เด•เต‡เดธเตเด•เดณเดฟเดฒเตเด‚, เด’เดฐเต API-เดฏเดฟเตฝ เดจเดฟเดจเตเดจเต เดฒเดญเดฟเดšเตเดš เดชเตเดฐเดคเดฟเด•เดฐเดฃเด‚ เด…เดฒเตเดฒเต†เด™เตเด•เดฟเตฝ เดธเด™เตเด•เต€เตผเดฃเตเดฃเดฎเดพเดฏ เดŸเตเดฐเต€ เด˜เดŸเดจเดฏเตเดณเตเดณ เดฎเดฑเตเดฑเต‡เดคเต†เด™เตเด•เดฟเดฒเตเด‚ เดกเดพเดฑเตเดฑเดฏเตเดฎเดพเดฏเดฟ เดชเตเดฐเดตเตผเดคเตเดคเดฟเด•เตเด•เตเดฎเตเดชเต‹เตพ, เดจเดฟเด™เตเด™เตพเด•เตเด•เต JSON, XML เดซเต‹เตผเดฎเดพเดฑเตเดฑเตเด•เตพ เดจเต‡เดฐเดฟเดŸเต‡เดฃเตเดŸเดฟเดตเดฐเตเดจเตเดจเต.

เดˆ เดซเต‹เตผเดฎเดพเดฑเตเดฑเตเด•เตพเด•เตเด•เต เดงเดพเดฐเดพเดณเด‚ เด—เตเดฃเด™เตเด™เดณเตเดฃเตเดŸเต: เด…เดต เดตเดณเดฐเต† เด’เดคเตเด•เตเด•เดฎเตเดณเตเดณ เดกเดพเดฑเตเดฑ เดธเด‚เดญเดฐเดฟเด•เตเด•เตเด•เดฏเตเด‚ เดตเดฟเดตเดฐเด™เตเด™เดณเตเดŸเต† เด…เดจเดพเดตเดถเตเดฏ เดคเดจเดฟเดชเตเดชเด•เตผเดชเตเดชเต เด’เดดเดฟเดตเดพเด•เตเด•เดพเตป เดจเดฟเด™เตเด™เดณเต† เด…เดจเตเดตเดฆเดฟเด•เตเด•เตเด•เดฏเตเด‚ เดšเต†เดฏเตเดฏเตเดจเตเดจเต.

เดˆ เดซเต‹เตผเดฎเดพเดฑเตเดฑเตเด•เดณเตเดŸเต† เดชเต‹เดฐเดพเดฏเตเดฎ เด…เดตเดฏเตเดŸเต† เดชเตเดฐเต‹เดธเดธเตเดธเดฟเด‚เด—เดฟเตปเตเดฑเต†เดฏเตเด‚ เดตเดฟเดถเด•เดฒเดจเดคเตเดคเดฟเตปเตเดฑเต†เดฏเตเด‚ เดธเด™เตเด•เต€เตผเดฃเตเดฃเดคเดฏเดพเดฃเต. เด˜เดŸเดจเดพเดฐเดนเดฟเดคเดฎเดพเดฏ เดกเดพเดฑเตเดฑ เด•เดฃเด•เตเด•เตเด•เต‚เดŸเตเดŸเดฒเตเด•เดณเดฟเตฝ เด‰เดชเดฏเต‹เด—เดฟเด•เตเด•เดพเตป เด•เดดเดฟเดฏเดฟเดฒเตเดฒ, เด…เดคเดฟเตฝ เดฆเตƒเดถเตเดฏเดตเตฝเด•เตเด•เดฐเดฃเด‚ เดจเดฟเตผเดฎเตเดฎเดฟเด•เตเด•เดพเตป เด•เดดเดฟเดฏเดฟเดฒเตเดฒ.

เดจเต†เดธเตเดฑเตเดฑเดกเต เด•เต‹เดณเด™เตเด™เตพ เดตเดฟเด•เดธเดฟเดชเตเดชเดฟเด•เตเด•เตเดจเตเดจเต - R เดญเดพเดท เด‰เดชเดฏเต‹เด—เดฟเดšเตเดšเต เดฒเดฟเดธเตเดฑเตเดฑเตเด•เตพ (tidyr เดชเดพเด•เตเด•เต‡เดœเตเด‚ unnest เด•เตเดŸเตเด‚เดฌเดคเตเดคเดฟเดจเตเดฑเต† เดชเตเดฐเดตเตผเดคเตเดคเดจเด™เตเด™เดณเตเด‚)

เดˆ เดฒเต‡เด–เดจเด‚ เดชเตเดฐเดธเดฟเดฆเตเดงเต€เด•เดฐเดฃเดคเตเดคเดฟเตปเตเดฑเต† เดฏเตเด•เตเดคเดฟเดธเดนเดฎเดพเดฏ เดคเตเดŸเตผเดšเตเดšเดฏเดพเดฃเต "R เดชเดพเด•เตเด•เต‡เดœเต tidyr เด‰เด‚ เด…เดคเดฟเตปเตเดฑเต† เดชเตเดคเดฟเดฏ เดชเตเดฐเดตเตผเดคเตเดคเดจเด™เตเด™เดณเตเด‚ pivot_longer, pivot_wider". เดชเดพเด•เตเด•เต‡เดœเต เด‰เดชเดฏเต‹เด—เดฟเดšเตเดšเต เด˜เดŸเดจเดพเดฐเดนเดฟเดคเดฎเดพเดฏ เดกเดพเดฑเตเดฑเดพ เด˜เดŸเดจเด•เดณเต† เดชเดฐเดฟเดšเดฟเดคเดตเตเด‚ เดตเดฟเดถเด•เดฒเดจเดคเตเดคเดฟเดจเต เด…เดจเตเดฏเต‹เดœเตเดฏเดตเตเดฎเดพเดฏ เด’เดฐเต เดชเดŸเตเดŸเดฟเด• เดฐเต‚เดชเดคเตเดคเดฟเดฒเต‡เด•เตเด•เต เด•เตŠเดฃเตเดŸเตเดตเดฐเดพเตป เด‡เดคเต เดจเดฟเด™เตเด™เดณเต† เดธเดนเดพเดฏเดฟเด•เตเด•เตเด‚. tidyr, เดฒเตˆเดฌเตเดฐเดฑเดฟเดฏเตเดŸเต† เด•เดพเดฎเตเดชเดฟเตฝ เด‰เตพเดชเตเดชเต†เดŸเตเดคเตเดคเดฟเดฏเดฟเดŸเตเดŸเตเดฃเตเดŸเต tidyverse, เด…เดคเดฟเตปเตเดฑเต† เดชเตเดฐเดตเตผเดคเตเดคเดจเด™เตเด™เดณเตเดŸเต† เด•เตเดŸเตเด‚เดฌเด‚ unnest_*().

เด‰เดณเตเดณเดŸเด•เตเด•เด‚

เดจเดฟเด™เตเด™เตพเด•เตเด•เต เดกเดพเดฑเตเดฑ เดตเดฟเดถเด•เดฒเดจเดคเตเดคเดฟเตฝ เดคเดพเตฝเดชเตเดชเดฐเตเดฏเดฎเตเดฃเตเดŸเต†เด™เตเด•เดฟเตฝ, เดจเดฟเด™เตเด™เตพเด•เตเด•เต เดŽเดจเตเดฑเต† เดคเดพเตฝเดชเตเดชเดฐเตเดฏเดฎเตเดฃเตเดŸเดพเด•เดพเด‚ เดŸเต†เดฒเด—เตเดฐเดพเด‚ ะธ YouTube เดšเดพเดจเดฒเตเด•เตพ. เด‰เดณเตเดณเดŸเด•เตเด•เดคเตเดคเดฟเดจเตเดฑเต† เดญเต‚เดฐเดฟเดญเดพเด—เดตเตเด‚ R เดญเดพเดทเดฏเตโ€Œเด•เตเด•เดพเดฏเดฟ เดธเดฎเตผเดชเตเดชเดฟเดšเตเดšเดฟเดฐเดฟเด•เตเด•เตเดจเตเดจเต.

  1. เด†เดฎเตเด–เด‚
  2. GitHub เด‰เดชเดฏเต‹เด•เตเดคเดพเด•เตเด•เตพ
  3. เด—เดฟเดคเตเดคเดฌเต เดถเต‡เด–เดฐเดฃเด™เตเด™เตพ
  4. เด—เต†เดฏเดฟเด‚ เด“เดซเต เดคเตเดฐเต‹เตบเดธเต เด•เดฅเดพเดชเดพเดคเตเดฐเด™เตเด™เตพ
  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() เด’เดฐเต เดคเต€เดฏเดคเดฟ เดซเตเดฐเต†เดฏเดฟเดฎเดฟเตปเตเดฑเต† เด†เดจเตเดคเดฐเดฟเด• เดฒเดฟเดธเตเดฑเตเดฑเดฟเตฝ เดจเดฟเดจเตเดจเต เด…เดคเดฟเตปเตเดฑเต† เด‰เดฏเตผเดจเตเดจ เดคเดฒเดคเตเดคเดฟเดฒเต‡เด•เตเด•เต เด˜เดŸเด•เด™เตเด™เตพ เดจเต€เด•เตเด•เตเดจเตเดจเดคเต เดชเต‹เดฒเต†.

เด—เดฟเดคเตเดคเดฌเต เดถเต‡เด–เดฐเดฃเด™เตเด™เตพ

เดฒเดฟเดธเตเดฑเตเดฑเต เดตเดฟเดจเตเดฏเดพเดธเด‚ 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 เด‰เดชเดฏเต‹เด—เดฟเดšเตเดšเต เดœเดฟเดฏเต‹เด•เต‹เดกเดฟเด‚เด—เต

เด…เดŸเตเดคเตเดคเดคเดพเดฏเดฟ, Google-เตปเตเดฑเต† เดœเดฟเดฏเต‹เด•เต‹เดกเดฟเด‚เด—เต เดธเต‡เดตเดจเดคเตเดคเดฟเตฝ เดจเดฟเดจเตเดจเต เดฒเดญเดฟเดšเตเดš เดกเดพเดฑเตเดฑเดฏเตเดŸเต† เด•เต‚เดŸเตเดคเตฝ เดธเด™เตเด•เต€เตผเดฃเตเดฃเดฎเดพเดฏ เด˜เดŸเดจ เดžเด™เตเด™เตพ เดจเต‹เด•เตเด•เดพเด‚. เด•เดพเดทเดฟเด‚เด—เต เด•เตเดฐเต†เดกเตปเดทเตเดฏเดฒเตเด•เตพ Google เดฎเดพเดชเตโ€Œเดธเต API-เดฏเดฟเตฝ เดชเตเดฐเดตเตผเดคเตเดคเดฟเด•เตเด•เตเดจเตเดจเดคเดฟเดจเตเดณเตเดณ เดจเดฟเดฏเดฎเด™เตเด™เตพเด•เตเด•เต เดตเดฟเดฐเตเดฆเตเดงเดฎเดพเดฃเต, เด…เดคเดฟเดจเดพเตฝ เดžเดพเตป เด†เดฆเตเดฏเด‚ API-เด•เตเด•เต เดšเตเดฑเตเดฑเตเด‚ เด’เดฐเต เดฒเดณเดฟเดคเดฎเดพเดฏ เดฑเดพเดชเตเดชเตผ เดŽเดดเตเดคเดพเด‚. เด’เดฐเต เดชเดฐเดฟเดธเตเดฅเดฟเดคเดฟ เดตเต‡เดฐเดฟเดฏเดฌเดฟเดณเดฟเตฝ Google Maps API เด•เต€ เดธเด‚เดญเดฐเดฟเด•เตเด•เตเดจเตเดจเดคเดฟเดจเต† เด…เดŸเดฟเดธเตเดฅเดพเดจเดฎเดพเด•เตเด•เดฟเดฏเตเดณเตเดณเดคเดพเดฃเต เด‡เดคเต; เดจเดฟเด™เตเด™เดณเตเดŸเต† เดŽเตปเดตเดฏเต‹เตบเดฎเต†เตปเตเดฑเต เดตเต‡เดฐเดฟเดฏเดฌเดฟเดณเตเด•เดณเดฟเตฝ เดธเด‚เดญเดฐเดฟเดšเตเดšเดฟเดฐเดฟเด•เตเด•เตเดจเตเดจ Google เดฎเดพเดชเตโ€Œเดธเต 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 เด‰เดฏเตผเดจเตเดจ เดคเดฒเดคเตเดคเดฟเตฝ เดธเด‚เดญเดฐเดฟเดšเตเดšเดฟเดฐเดฟเด•เตเด•เตเดจเตเดจ เดเดกเดฟ เด•เต‹เดณเด‚ เด†เดตเตผเดคเตเดคเดฟเด•เตเด•เตเดจเตเดจเต, เด…เดคเดฟเดจเดพเตฝ เดจเดฎเตเด•เตเด•เต เด…เดคเต เดจเต€เด•เตเด•เด‚เดšเต†เดฏเตเดฏเดพเด‚:

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

DDoS เดชเดฐเดฟเดฐเด•เตเดทเดฏเตเดณเตเดณ เดธเตˆเดฑเตเดฑเตเด•เตพเด•เตเด•เดพเดฏเดฟ เดตเดฟเดถเตเดตเดธเดจเต€เดฏเดฎเดพเดฏ เดนเต‹เดธเตเดฑเตเดฑเดฟเด‚เด—เต เดตเดพเด™เตเด™เตเด•, VPS VDS เดธเต†เตผเดตเดฑเตเด•เตพ ๐Ÿ”ฅ DDoS เดชเดฐเดฟเดฐเด•เตเดท, VPS VDS เดธเต†เตผเดตเดฑเตเด•เตพ เด‰เดณเตเดณ เดตเดฟเดถเตเดตเดธเดจเต€เดฏเดฎเดพเดฏ เดตเต†เดฌเตโ€Œเดธเตˆเดฑเตเดฑเต เดนเต‹เดธเตเดฑเตเดฑเดฟเด‚เด—เต เดตเดพเด™เตเด™เต‚ | ProHoster