R เชชเซ‡เช•เซ‡เชœ tidyr เช…เชจเซ‡ เชคเซ‡เชจเชพ เชจเชตเชพ เช•เชพเชฐเซเชฏเซ‹ pivot_longer เช…เชจเซ‡ pivot_wider

เชชเซ‡เช•เซ‡เชœ เชตเซเชฏเชตเชธเซเชฅเชฟเชค R เชญเชพเชทเชพเชฎเชพเช‚ เชธเซŒเชฅเซ€ เชตเชงเซ เชฒเซ‹เช•เชชเซเชฐเชฟเชฏ เชชเซเชธเซเชคเช•เชพเชฒเชฏเซ‹เชฎเชพเช‚เชจเชพ เชเช•เชฎเชพเช‚ เชธเชฎเชพเชตเชฟเชทเซเชŸ - เชตเซเชฏเชตเชธเซเชฅเชฟเชค.
เชชเซ‡เช•เซ‡เชœเชจเซ‹ เชฎเซเช–เซเชฏ เชนเซ‡เชคเซ เชกเซ‡เชŸเชพเชจเซ‡ เชธเชšเซ‹เชŸ เชธเซเชตเชฐเซ‚เชชเชฎเชพเช‚ เชฒเชพเชตเชตเชพเชจเซ‹ เช›เซ‡.

Habrรฉ เชชเชฐ เชชเชนเซ‡เชฒเซ‡เชฅเซ€ เชœ เช‰เชชเชฒเชฌเซเชง เช›เซ‡ เชชเซเชฐเช•เชพเชถเชจ เช† เชชเซ‡เช•เซ‡เชœเชจเซ‡ เชธเชฎเชฐเซเชชเชฟเชค เช›เซ‡, เชชเชฐเช‚เชคเซ เชคเซ‡ 2015 เชจเซเช‚ เช›เซ‡. เช…เชจเซ‡ เชนเซเช‚ เชคเชฎเชจเซ‡ เชธเซŒเชฅเซ€ เชตเชฐเซเชคเชฎเชพเชจ เชซเซ‡เชฐเชซเชพเชฐเซ‹ เชตเชฟเชถเซ‡ เชœเชฃเชพเชตเชตเชพ เชฎเชพเช‚เช—เซ เช›เซเช‚, เชœเซ‡เชจเซ€ เชœเชพเชนเซ‡เชฐเชพเชค เชคเซ‡เชจเชพ เชฒเซ‡เช–เช• เชนเซ‡เชกเชฒเซ€ เชตเชฟเช•เชนเซ‡เชฎ เชฆเซเชตเชพเชฐเชพ เชฅเซ‹เชกเชพ เชฆเชฟเชตเชธเซ‹ เชชเชนเซ‡เชฒเชพ เช•เชฐเชตเชพเชฎเชพเช‚ เช†เชตเซ€ เชนเชคเซ€.

R เชชเซ‡เช•เซ‡เชœ tidyr เช…เชจเซ‡ เชคเซ‡เชจเชพ เชจเชตเชพ เช•เชพเชฐเซเชฏเซ‹ pivot_longer เช…เชจเซ‡ pivot_wider

เชเชธเชœเซ‡เช•เซ‡: gather() เช…เชจเซ‡ เชธเซเชชเซเชฐเซ‡เชก() เชจเชพเชชเชธเช‚เชฆ เชฅเชถเซ‡?

เชนเซ‡เชกเชฒเซ€ เชตเชฟเช•เชนเชพเชฎ: เช…เชฎเซเช• เช…เช‚เชถเซ‡. เช…เชฎเซ‡ เชนเชตเซ‡ เช† เชซเช‚เช•เซเชถเชจเชจเชพ เช‰เชชเชฏเซ‹เช—เชจเซ€ เชญเชฒเชพเชฎเชฃ เช•เชฐเซ€เชถเซเช‚ เชจเชนเซ€เช‚ เช…เชจเซ‡ เชคเซ‡เชฎเชพเช‚ เชฌเช—เซเชธ เช เซ€เช• เช•เชฐเซ€เชถเซเช‚, เชชเชฐเช‚เชคเซ เชคเซ‡เช“ เชคเซ‡เชฎเชจเซ€ เชตเชฐเซเชคเชฎเชพเชจ เชธเซเชฅเชฟเชคเชฟเชฎเชพเช‚ เชชเซ‡เช•เซ‡เชœเชฎเชพเช‚ เชนเชพเชœเชฐ เชฐเชนเซ‡เชถเซ‡.

เช…เชจเซเช•เซเชฐเชฎเชฃเชฟเช•เชพ

เชœเซ‹ เชคเชฎเชจเซ‡ เชกเซ‡เชŸเชพ เชตเชฟเชถเซเชฒเซ‡เชทเชฃเชฎเชพเช‚ เชฐเชธ เชนเซ‹เชฏ, เชคเซ‹ เชคเชฎเชจเซ‡ เชฎเชพเชฐเชพเชฎเชพเช‚ เชฐเชธ เชนเซ‹เชˆ เชถเช•เซ‡ เช›เซ‡ เชŸเซ‡เชฒเชฟเช—เซเชฐเชพเชฎ ะธ เชฏเซ เชŸเซเชฏเซเชฌ เชšเซ‡เชจเชฒเซ‹ เชฎเซ‹เชŸเชพเชญเชพเช—เชจเซ€ เชธเชพเชฎเช—เซเชฐเซ€ R เชญเชพเชทเชพเชจเซ‡ เชธเชฎเชฐเซเชชเชฟเชค เช›เซ‡.

เชตเซเชฏเชตเชธเซเชฅเชฟเชค เชกเซ‡เชŸเชพ เช–เซเชฏเชพเชฒ

เชฒเช•เซเชทเซเชฏ เชตเซเชฏเชตเชธเซเชฅเชฟเชค โ€” เชคเชฎเชจเซ‡ เชกเซ‡เชŸเชพ เช•เชนเซ‡เชตเชพเชคเชพ เชธเซเช˜เชก เชธเซเชตเชฐเซ‚เชชเชฎเชพเช‚ เชฒเชพเชตเชตเชพเชฎเชพเช‚ เชฎเชฆเชฆ เช•เชฐเซ‡ เช›เซ‡. เชธเซเช˜เชก เชกเซ‡เชŸเชพ เช เชกเซ‡เชŸเชพ เช›เซ‡ เชœเซเชฏเชพเช‚:

  • เชฆเชฐเซ‡เช• เชšเชฒ เชเช• เช•เซ‰เชฒเชฎเชฎเชพเช‚ เช›เซ‡.
  • เชฆเชฐเซ‡เช• เช…เชตเชฒเซ‹เช•เชจ เชเช• เชถเชฌเซเชฆเชฎเชพเชณเชพ เช›เซ‡.
  • เชฆเชฐเซ‡เช• เชฎเซ‚เชฒเซเชฏ เชเช• เช•เซ‹เชท เช›เซ‡.

เชชเซƒเชฅเซเชฅเช•เชฐเชฃ เช•เชฐเชคเซ€ เชตเช–เชคเซ‡ เชตเซเชฏเชตเชธเซเชฅเชฟเชค เชกเซ‡เชŸเชพเชฎเชพเช‚ เชฐเชœเซ‚ เช•เชฐเชตเชพเชฎเชพเช‚ เช†เชตเซ‡เชฒ เชกเซ‡เชŸเชพ เชธเชพเชฅเซ‡ เช•เชพเชฎ เช•เชฐเชตเซเช‚ เช–เซ‚เชฌ เชธเชฐเชณ เช…เชจเซ‡ เชตเชงเซ เช…เชจเซเช•เซ‚เชณ เช›เซ‡.

เชตเซเชฏเชตเชธเซเชฅเชฟเชค เชชเซ‡เช•เซ‡เชœเชฎเชพเช‚ เชธเชฎเชพเชตเชฟเชทเซเชŸ เชฎเซเช–เซเชฏ เช•เชพเชฐเซเชฏเซ‹

tidyr เชฎเชพเช‚ เช•เซ‹เชทเซเชŸเช•เซ‹เชจเซ‡ เชฐเซ‚เชชเชพเช‚เชคเชฐเชฟเชค เช•เชฐเชตเชพ เชฎเชพเชŸเซ‡ เชฐเชšเชพเชฏเซ‡เชฒ เช•เชพเชฐเซเชฏเซ‹เชจเซ‹ เชธเชฎเซ‚เชน เช›เซ‡:

  • fill() - เช…เช—เชพเช‰เชจเชพ เชฎเซ‚เชฒเซเชฏเซ‹ เชธเชพเชฅเซ‡ เช•เซ‰เชฒเชฎเชฎเชพเช‚ เช–เซ‚เชŸเชคเชพ เชฎเซ‚เชฒเซเชฏเซ‹ เชญเชฐเชตเชพ;
  • separate() - เชตเชฟเชญเชพเชœเช•เชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ€เชจเซ‡ เชเช• เช•เซเชทเซ‡เชคเซเชฐเชจเซ‡ เช…เชจเซ‡เช•เชฎเชพเช‚ เชตเชฟเชญเชพเชœเชฟเชค เช•เชฐเซ‡ เช›เซ‡;
  • unite() โ€” เช…เชจเซ‡เช• เช•เซเชทเซ‡เชคเซเชฐเซ‹เชจเซ‡ เชเช•เชฎเชพเช‚ เชœเซ‹เชกเชตเชพเชจเซเช‚ เช•เชพเชฐเซเชฏ เช•เชฐเซ‡ เช›เซ‡, เช•เชพเชฐเซเชฏเชจเซ€ เชตเซเชฏเชธเซเชค เช•เซเชฐเชฟเชฏเชพ separate();
  • pivot_longer() โ€” เชเช• เช•เชพเชฐเซเชฏ เชœเซ‡ เชกเซ‡เชŸเชพเชจเซ‡ เชตเชฟเชถเชพเชณ เชซเซ‹เชฐเซเชฎเซ‡เชŸเชฎเชพเช‚เชฅเซ€ เชฒเชพเช‚เชฌเชพ เชซเซ‹เชฐเซเชฎเซ‡เชŸเชฎเชพเช‚ เชฐเซ‚เชชเชพเช‚เชคเชฐเชฟเชค เช•เชฐเซ‡ เช›เซ‡;
  • pivot_wider() - เชเช• เช•เชพเชฐเซเชฏ เชœเซ‡ เชกเซ‡เชŸเชพเชจเซ‡ เชฒเชพเช‚เชฌเชพ เชซเซ‹เชฐเซเชฎเซ‡เชŸเชฎเชพเช‚เชฅเซ€ เชตเชฟเชถเชพเชณ เชซเซ‹เชฐเซเชฎเซ‡เชŸเชฎเชพเช‚ เชฐเซ‚เชชเชพเช‚เชคเชฐเชฟเชค เช•เชฐเซ‡ เช›เซ‡. เชซเช‚เช•เซเชถเชจ เชฆเซเชตเชพเชฐเชพ เช•เชฐเชตเชพเชฎเชพเช‚ เช†เชตเซ‡เชฒ เชเช•เชจเซ€ เชตเชฟเชชเชฐเซ€เชค เช•เชพเชฎเช—เซ€เชฐเซ€ pivot_longer().
  • gather()เชœเซ‚เชจเชพ โ€” เชเช• เช•เชพเชฐเซเชฏ เชœเซ‡ เชกเซ‡เชŸเชพเชจเซ‡ เชตเชฟเชถเชพเชณ เชซเซ‹เชฐเซเชฎเซ‡เชŸเชฎเชพเช‚เชฅเซ€ เชฒเชพเช‚เชฌเชพ เชซเซ‹เชฐเซเชฎเซ‡เชŸเชฎเชพเช‚ เชฐเซ‚เชชเชพเช‚เชคเชฐเชฟเชค เช•เชฐเซ‡ เช›เซ‡;
  • spread()เชœเซ‚เชจเชพ - เชเช• เช•เชพเชฐเซเชฏ เชœเซ‡ เชกเซ‡เชŸเชพเชจเซ‡ เชฒเชพเช‚เชฌเชพ เชซเซ‹เชฐเซเชฎเซ‡เชŸเชฎเชพเช‚เชฅเซ€ เชตเชฟเชถเชพเชณ เชซเซ‹เชฐเซเชฎเซ‡เชŸเชฎเชพเช‚ เชฐเซ‚เชชเชพเช‚เชคเชฐเชฟเชค เช•เชฐเซ‡ เช›เซ‡. เชซเช‚เช•เซเชถเชจ เชฆเซเชตเชพเชฐเชพ เช•เชฐเชตเชพเชฎเชพเช‚ เช†เชตเซ‡เชฒ เชเช•เชจเซ€ เชตเชฟเชชเชฐเซ€เชค เช•เชพเชฎเช—เซ€เชฐเซ€ gather().

เชกเซ‡เชŸเชพเชจเซ‡ เชชเชนเซ‹เชณเชพเชฅเซ€ เชฒเชพเช‚เชฌเชพ เชซเซ‹เชฐเซเชฎเซ‡เชŸเชฎเชพเช‚ เช…เชจเซ‡ เชคเซ‡เชจเชพเชฅเซ€ เชตเชฟเชชเชฐเชฟเชคเชฎเชพเช‚ เช•เชจเซเชตเชฐเซเชŸ เช•เชฐเชตเชพ เชฎเชพเชŸเซ‡เชจเซ‹ เชจเชตเซ‹ เช–เซเชฏเชพเชฒ

เช…เช—เชพเช‰, เช† เชชเซเชฐเช•เชพเชฐเชจเชพ เชชเชฐเชฟเชตเชฐเซเชคเชจ เชฎเชพเชŸเซ‡ เชซเช‚เช•เซเชถเชจเชจเซ‹ เช‰เชชเชฏเซ‹เช— เชฅเชคเซ‹ เชนเชคเซ‹ gather() ะธ spread(). เช† เชซเช‚เช•เซเชถเชจเซเชธเชจเชพ เช…เชธเซเชคเชฟเชคเซเชตเชจเชพ เชตเชฐเซเชทเซ‹เชฅเซ€, เชคเซ‡ เชธเซเชชเชทเซเชŸ เชฅเชˆ เช—เชฏเซเช‚ เช›เซ‡ เช•เซ‡ เชชเซ‡เช•เซ‡เชœเชจเชพ เชฒเซ‡เช–เช• เชธเชนเชฟเชค เชฎเซ‹เชŸเชพเชญเชพเช—เชจเชพ เชตเชชเชฐเชพเชถเช•เชฐเซเชคเชพเช“ เชฎเชพเชŸเซ‡, เช† เชซเช‚เช•เซเชถเชจเซเชธเชจเชพ เชจเชพเชฎ เช…เชจเซ‡ เชคเซ‡เชฎเชจเซ€ เชฆเชฒเซ€เชฒเซ‹ เชเช•เชฆเชฎ เชธเซเชชเชทเซเชŸ เชจ เชนเชคเซ€, เช…เชจเซ‡ เชคเซ‡เชฎเชจเซ‡ เชถเซ‹เชงเชตเชพเชฎเชพเช‚ เช…เชจเซ‡ เช†เชฎเชพเช‚เชฅเซ€ เช•เชฏเซเช‚ เชซเช‚เช•เซเชถเชจ เช•เชจเซเชตเชฐเซเชŸ เชฅเชพเชฏ เช›เซ‡ เชคเซ‡ เชธเชฎเชœเชตเชพเชฎเชพเช‚ เชฎเซเชถเซเช•เซ‡เชฒเซ€เช“ เชŠเชญเซ€ เช•เชฐเซ‡ เช›เซ‡. เชชเชนเซ‹เชณเชพเชฅเซ€ เชฒเชพเช‚เชฌเชพ เชซเซ‹เชฐเซเชฎเซ‡เชŸ เชธเซเชงเซ€เชจเซ€ เชคเชพเชฐเซ€เช–เชจเซ€ เชซเซเชฐเซ‡เชฎ เช…เชจเซ‡ เชŠเชฒเชŸเซเช‚.

เช† เชธเช‚เชฆเชฐเซเชญเซ‡, เชฎเชพเช‚ เชตเซเชฏเชตเชธเซเชฅเชฟเชค เชฌเซ‡ เชจเชตเชพ, เชฎเชนเชคเซเชตเชชเซ‚เชฐเซเชฃ เช•เชพเชฐเซเชฏเซ‹ เช‰เชฎเซ‡เชฐเชตเชพเชฎเชพเช‚ เช†เชตเซเชฏเชพ เช›เซ‡ เชœเซ‡ เชคเชพเชฐเซ€เช– เชซเซเชฐเซ‡เชฎเชจเซ‡ เชชเชฐเชฟเชตเชฐเซเชคเชฟเชค เช•เชฐเชตเชพ เชฎเชพเชŸเซ‡ เชฐเชšเชพเชฏเซ‡เชฒ เช›เซ‡.

ะคัƒะฝะบั†ะธะธั‹ะต ั„ัƒะฝะบั†ะธะธ pivot_longer() ะธ pivot_wider() เชชเซ‡เช•เซ‡เชœเชฎเชพเช‚เชจเซ€ เช•เซ‡เชŸเชฒเซ€เช• เชธเซเชตเชฟเชงเชพเช“เชฅเซ€ เชชเซเชฐเซ‡เชฐเชฟเชค เชนเชคเชพ cdata, เชœเซเชนเซ‹เชจ เชฎเชพเช‰เชจเซเชŸ เช…เชจเซ‡ เชจเซ€เชจเชพ เชเซเชฎเซ‡เชฒ เชฆเซเชตเชพเชฐเชพ เชฌเชจเชพเชตเชตเชพเชฎเชพเช‚ เช†เชตเซ‡เชฒ.

tidyr 0.8.3.9000 เชจเซเช‚ เชธเซŒเชฅเซ€ เชตเชฐเซเชคเชฎเชพเชจ เชธเช‚เชธเซเช•เชฐเชฃ เช‡เชจเซเชธเซเชŸเซ‹เชฒ เช•เชฐเซ€ เชฐเชนเซเชฏเซเช‚ เช›เซ‡

เชชเซ‡เช•เซ‡เชœเชจเซเช‚ เชจเชตเซเช‚, เชธเซŒเชฅเซ€ เชตเชฐเซเชคเชฎเชพเชจ เชธเช‚เชธเซเช•เชฐเชฃ เช‡เชจเซเชธเซเชŸเซ‹เชฒ เช•เชฐเชตเชพ เชฎเชพเชŸเซ‡ เชตเซเชฏเชตเชธเซเชฅเชฟเชค 0.8.3.9000, เชœเซเชฏเชพเช‚ เชจเชตเซ€ เชธเซเชตเชฟเชงเชพเช“ เช‰เชชเชฒเชฌเซเชง เช›เซ‡, เชจเซ€เชšเซ‡เชจเชพ เช•เซ‹เชกเชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ‹.

devtools::install_github("tidyverse/tidyr")

เชฒเซ‡เช–เชจ เชธเชฎเชฏเซ‡, เช† เช•เชพเชฐเซเชฏเซ‹ เชซเช•เซเชค GitHub เชชเชฐเชจเชพ เชชเซ‡เช•เซ‡เชœเชจเชพ เชกเซ‡เชต เชตเชฐเซเชเชจเชฎเชพเช‚ เชœ เช‰เชชเชฒเชฌเซเชง เช›เซ‡.

เชจเชตเซ€ เชธเซเชตเชฟเชงเชพเช“เชฎเชพเช‚ เชธเช‚เช•เซเชฐเชฎเชฃ

เชนเช•เซ€เช•เชคเชฎเชพเช‚, เชจเชตเชพ เช•เชพเชฐเซเชฏเซ‹ เชธเชพเชฅเซ‡ เช•เชพเชฎ เช•เชฐเชตเชพ เชฎเชพเชŸเซ‡ เชœเซ‚เชจเซ€ เชธเซเช•เซเชฐเชฟเชชเซเชŸเซ‹เชจเซ‡ เชธเซเชฅเชพเชจเชพเช‚เชคเชฐเชฟเชค เช•เชฐเชตเซ€ เชฎเซเชถเซเช•เซ‡เชฒ เชจเชฅเซ€; เชตเชงเซ เชธเชพเชฐเซ€ เชฐเซ€เชคเซ‡ เชธเชฎเชœเชตเชพ เชฎเชพเชŸเซ‡, เชนเซเช‚ เชœเซ‚เชจเชพ เช•เชพเชฐเซเชฏเซ‹เชจเชพ เชฆเชธเซเชคเชพเชตเซ‡เชœเซ€เช•เชฐเชฃเชฎเชพเช‚เชฅเซ€ เชเช• เช‰เชฆเชพเชนเชฐเชฃ เชฒเชˆเชถ เช…เชจเซ‡ เชฌเชคเชพเชตเซ€เชถ เช•เซ‡ เชจเชตเชพ เช•เชพเชฐเซเชฏเซ‹เชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ€เชจเซ‡ เชธเชฎเชพเชจ เช•เชพเชฎเช—เซ€เชฐเซ€ เช•เซ‡เชตเซ€ เชฐเซ€เชคเซ‡ เช•เชฐเชตเชพเชฎเชพเช‚ เช†เชตเซ‡ เช›เซ‡. pivot_*() เช•เชพเชฐเซเชฏเซ‹

เชตเชฟเชถเชพเชณ เชซเซ‹เชฐเซเชฎเซ‡เชŸเชจเซ‡ เชฒเชพเช‚เชฌเชพ เชซเซ‹เชฐเซเชฎเซ‡เชŸเชฎเชพเช‚ เช•เชจเซเชตเชฐเซเชŸ เช•เชฐเซ‹.

เชเช•เชคเซเชฐ เช•เชพเชฐเซเชฏ เชฆเชธเซเชคเชพเชตเซ‡เชœเซ€เช•เชฐเชฃเชฎเชพเช‚เชฅเซ€ เช‰เชฆเชพเชนเชฐเชฃ เช•เซ‹เชก

# example
library(dplyr)
stocks <- data.frame(
  time = as.Date('2009-01-01') + 0:9,
  X = rnorm(10, 0, 1),
  Y = rnorm(10, 0, 2),
  Z = rnorm(10, 0, 4)
)

# old
stocks_gather <- stocks %>% gather(key   = stock, 
                                   value = price, 
                                   -time)

# new
stocks_long   <- stocks %>% pivot_longer(cols      = -time, 
                                       names_to  = "stock", 
                                       values_to = "price")

เชฒเชพเช‚เชฌเชพ เชซเซ‹เชฐเซเชฎเซ‡เชŸเชจเซ‡ เชตเชฟเชถเชพเชณ เชซเซ‹เชฐเซเชฎเซ‡เชŸเชฎเชพเช‚ เชฐเซ‚เชชเชพเช‚เชคเชฐเชฟเชค เช•เชฐเชตเซเช‚.

เชธเซเชชเซเชฐเซ‡เชก เชซเช‚เช•เซเชถเชจ เชฆเชธเซเชคเชพเชตเซ‡เชœเซ€เช•เชฐเชฃเชฎเชพเช‚เชฅเซ€ เช‰เชฆเชพเชนเชฐเชฃ เช•เซ‹เชก

# old
stocks_spread <- stocks_gather %>% spread(key = stock, 
                                          value = price) 

# new 
stock_wide    <- stocks_long %>% pivot_wider(names_from  = "stock",
                                            values_from = "price")

เช•เชพเชฐเชฃ เช•เซ‡ เชธเชพเชฅเซ‡ เช•เชพเชฎ เช•เชฐเชตเชพเชจเชพ เช‰เชชเชฐเชจเชพ เช‰เชฆเชพเชนเชฐเชฃเซ‹เชฎเชพเช‚ pivot_longer() ะธ pivot_wider(), เชฎเซ‚เชณ เช•เซ‹เชทเซเชŸเช•เชฎเชพเช‚ เชถเซ‡เชฐเซ‹ เชฆเชฒเซ€เชฒเซ‹เชฎเชพเช‚ เชธเซ‚เชšเชฟเชฌเชฆเซเชง เช•เซ‹เชˆ เช•เซ‰เชฒเชฎ เชจเชฅเซ€ เชจเชพเชฎเซ‹_เชจเซ‡ ะธ เชฎเซ‚เชฒเซเชฏเซ‹_เชจเซ‡ เชคเซ‡เชฎเชจเชพ เชจเชพเชฎ เช…เชตเชคเชฐเชฃ เชšเชฟเชนเซเชจเซ‹เชฎเชพเช‚ เชนเซ‹เชตเชพ เชœเซ‹เชˆเช.

เชเช• เชŸเซ‡เชฌเชฒ เช•เซ‡ เชœเซ‡ เชคเชฎเชจเซ‡ เชจเชตเชพ เช–เซเชฏเชพเชฒ เชธเชพเชฅเซ‡ เช•เชพเชฎ เช•เชฐเชตเชพ เชฎเชพเชŸเซ‡ เช•เซ‡เชตเซ€ เชฐเซ€เชคเซ‡ เชธเซเชตเชฟเชš เช•เชฐเชตเซเช‚ เชคเซ‡ เชธเชฎเชœเชตเชพเชฎเชพเช‚ เชฎเชฆเชฆ เช•เชฐเชถเซ‡ เชตเซเชฏเชตเชธเซเชฅเชฟเชค.

R เชชเซ‡เช•เซ‡เชœ tidyr เช…เชจเซ‡ เชคเซ‡เชจเชพ เชจเชตเชพ เช•เชพเชฐเซเชฏเซ‹ pivot_longer เช…เชจเซ‡ pivot_wider

เชฒเซ‡เช–เช• เชคเชฐเชซเชฅเซ€ เชจเซ‹เช‚เชง

เชจเซ€เชšเซ‡เชจเซ‹ เชคเชฎเชพเชฎ เชŸเซ‡เช•เซเชธเซเชŸ เช…เชจเซเช•เซ‚เชฒเชจเชถเซ€เชฒ เช›เซ‡, เชนเซเช‚ เชฎเชซเชค เช…เชจเซเชตเชพเชฆ เชชเชฃ เช•เชนเซ€เชถ เชตเชฟเช—เซเชจเซ‡เชŸ เช…เชงเชฟเช•เซƒเชค เชตเซเชฏเชตเชธเซเชฅเชฟเชค เชชเซเชธเซเชคเช•เชพเชฒเชฏเชจเซ€ เชตเซ‡เชฌเชธเชพเช‡เชŸ เชชเชฐเชฅเซ€.

เชกเซ‡เชŸเชพเชจเซ‡ เชตเชฟเชถเชพเชณเชฅเซ€ เชฒเชพเช‚เชฌเชพ เชซเซ‹เชฐเซเชฎเซ‡เชŸเชฎเชพเช‚ เช•เชจเซเชตเชฐเซเชŸ เช•เชฐเชตเชพเชจเซเช‚ เชเช• เชธเชฐเชณ เช‰เชฆเชพเชนเชฐเชฃ

pivot_longer () โ€” เช•เซ‰เชฒเชฎเชจเซ€ เชธเช‚เช–เซเชฏเชพ เช˜เชŸเชพเชกเซ€เชจเซ‡ เช…เชจเซ‡ เชชเช‚เช•เซเชคเชฟเช“เชจเซ€ เชธเช‚เช–เซเชฏเชพเชฎเชพเช‚ เชตเชงเชพเชฐเซ‹ เช•เชฐเซ€เชจเซ‡ เชกเซ‡เชŸเชพ เชธเซ‡เชŸเชจเซ‡ เชฒเชพเช‚เชฌเซ‹ เชฌเชจเชพเชตเซ‡ เช›เซ‡.

R เชชเซ‡เช•เซ‡เชœ tidyr เช…เชจเซ‡ เชคเซ‡เชจเชพ เชจเชตเชพ เช•เชพเชฐเซเชฏเซ‹ pivot_longer เช…เชจเซ‡ pivot_wider

เชฒเซ‡เช–เชฎเชพเช‚ เชชเซเชฐเชธเซเชคเซเชค เช‰เชฆเชพเชนเชฐเชฃเซ‹ เชšเชฒเชพเชตเชตเชพ เชฎเชพเชŸเซ‡, เชคเชฎเชพเชฐเซ‡ เชชเชนเซ‡เชฒเชพ เชœเชฐเซ‚เชฐเซ€ เชชเซ‡เช•เซ‡เชœเซ‹เชจเซ‡ เช•เชจเซ‡เช•เซเชŸ เช•เชฐเชตเชพเชจเซ€ เชœเชฐเซ‚เชฐ เช›เซ‡:

library(tidyr)
library(dplyr)
library(readr)

เชšเชพเชฒเซ‹ เช•เชนเซ€เช เช•เซ‡ เช…เชฎเชพเชฐเซ€ เชชเชพเชธเซ‡ เชธเชฐเซเชตเซ‡เช•เซเชทเชฃเชจเชพ เชชเชฐเชฟเชฃเชพเชฎเซ‹ เชธเชพเชฅเซ‡เชจเซเช‚ เชŸเซ‡เชฌเชฒ เช›เซ‡ เชœเซ‡เชฎเชพเช‚ (เช…เชจเซเชฏ เชตเชธเซเชคเซเช“เชจเซ€ เชธเชพเชฅเซ‡) เชฒเซ‹เช•เซ‹เชจเซ‡ เชคเซ‡เชฎเชจเชพ เชงเชฐเซเชฎ เช…เชจเซ‡ เชตเชพเชฐเซเชทเชฟเช• เช†เชตเช• เชตเชฟเชถเซ‡ เชชเซ‚เช›เชตเชพเชฎเชพเช‚ เช†เชตเซเชฏเซเช‚ เช›เซ‡:

#> # A tibble: 18 x 11
#>    religion `<$10k` `$10-20k` `$20-30k` `$30-40k` `$40-50k` `$50-75k`
#>    <chr>      <dbl>     <dbl>     <dbl>     <dbl>     <dbl>     <dbl>
#>  1 Agnostic      27        34        60        81        76       137
#>  2 Atheist       12        27        37        52        35        70
#>  3 Buddhist      27        21        30        34        33        58
#>  4 Catholic     418       617       732       670       638      1116
#>  5 Donโ€™t kโ€ฆ      15        14        15        11        10        35
#>  6 Evangelโ€ฆ     575       869      1064       982       881      1486
#>  7 Hindu          1         9         7         9        11        34
#>  8 Historiโ€ฆ     228       244       236       238       197       223
#>  9 Jehovahโ€ฆ      20        27        24        24        21        30
#> 10 Jewish        19        19        25        25        30        95
#> # โ€ฆ with 8 more rows, and 4 more variables: `$75-100k` <dbl>,
#> #   `$100-150k` <dbl>, `>150k` <dbl>, `Don't know/refused` <dbl>

เช† เช•เซ‹เชทเซเชŸเช•เชฎเชพเช‚ เช‰เชคเซเชคเชฐเชฆเชพเชคเชพเช“เชจเซ‹ เชงเชฐเซเชฎ เชกเซ‡เชŸเชพ เชชเช‚เช•เซเชคเชฟเช“เชฎเชพเช‚ เช›เซ‡ เช…เชจเซ‡ เช†เชตเช•เชจเชพ เชธเซเชคเชฐเซ‹ เช•เซ‰เชฒเชฎเชจเชพ เชจเชพเชฎเซ‹เชฎเชพเช‚ เชซเซ‡เชฒเชพเชฏเซ‡เชฒเชพ เช›เซ‡. เชฆเชฐเซ‡เช• เชถเซเชฐเซ‡เชฃเซ€เชฎเชพเช‚เชฅเซ€ เช‰เชคเซเชคเชฐเชฆเชพเชคเชพเช“เชจเซ€ เชธเช‚เช–เซเชฏเชพ เชงเชฐเซเชฎ เช…เชจเซ‡ เช†เชตเช• เชธเซเชคเชฐเชจเชพ เช†เช‚เชคเชฐเช›เซ‡เชฆ เชชเชฐ เชธเซ‡เชฒ เชฎเซ‚เชฒเซเชฏเซ‹เชฎเชพเช‚ เชธเช‚เช—เซเชฐเชนเชฟเชค เช›เซ‡. เช•เซ‹เชทเซเชŸเช•เชจเซ‡ เชธเซเช˜เชก, เชฏเซ‹เช—เซเชฏ เชซเซ‹เชฐเซเชฎเซ‡เชŸเชฎเชพเช‚ เชฒเชพเชตเชตเชพ เชฎเชพเชŸเซ‡, เชคเซ‡เชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเชตเชพ เชฎเชพเชŸเซ‡ เชชเซ‚เชฐเชคเซเช‚ เช›เซ‡ pivot_longer():

pew %>% 
  pivot_longer(cols = -religion, names_to = "income", values_to = "count")

pew %>% 
  pivot_longer(cols = -religion, names_to = "income", values_to = "count")
#> # A tibble: 180 x 3
#>    religion income             count
#>    <chr>    <chr>              <dbl>
#>  1 Agnostic <$10k                 27
#>  2 Agnostic $10-20k               34
#>  3 Agnostic $20-30k               60
#>  4 Agnostic $30-40k               81
#>  5 Agnostic $40-50k               76
#>  6 Agnostic $50-75k              137
#>  7 Agnostic $75-100k             122
#>  8 Agnostic $100-150k            109
#>  9 Agnostic >150k                 84
#> 10 Agnostic Don't know/refused    96
#> # โ€ฆ with 170 more rows

เช•เชพเชฐเซเชฏ เชฆเชฒเซ€เชฒเซ‹ pivot_longer()

  • เชชเซเชฐเชฅเชฎ เชฆเชฒเซ€เชฒ เช•เซ‹เชฒเซเชธ, เชตเชฐเซเชฃเชตเซ‡ เช›เซ‡ เช•เซ‡ เช•เชˆ เช•เซ‰เชฒเชฎเชจเซ‡ เชฎเชฐเซเชœ เช•เชฐเชตเชพเชจเซ€ เชœเชฐเซ‚เชฐ เช›เซ‡. เช† เช•เชฟเชธเซเชธเชพเชฎเชพเช‚, เชธเชฟเชตเชพเชฏเชจเชพ เชคเชฎเชพเชฎ เช•เซ‰เชฒเชฎ เชธเชฎเชฏ.
  • เชฆเชฒเซ€เชฒ เชจเชพเชฎเซ‹_เชจเซ‡ เชตเซ‡เชฐเซ€เชเชฌเชฒเชจเซเช‚ เชจเชพเชฎ เช†เชชเซ‡ เช›เซ‡ เชœเซ‡ เช…เชฎเซ‡ เชเช•เซ€เช•เซƒเชค เช•เชฐเซ‡เชฒ เช•เซ‰เชฒเชฎเชจเชพ เชจเชพเชฎ เชชเชฐเชฅเซ€ เชฌเชจเชพเชตเชตเชพเชฎเชพเช‚ เช†เชตเชถเซ‡.
  • เชฎเซ‚เชฒเซเชฏเซ‹_เชจเซ‡ เชเช• เชšเชฒเชจเซเช‚ เชจเชพเชฎ เช†เชชเซ‡ เช›เซ‡ เชœเซ‡ เชฎเชฐเซเชœ เช•เชฐเซ‡เชฒ เช•เซ‰เชฒเชฎเชจเชพ เช•เซ‹เชทเซ‹เชจเชพ เชฎเซ‚เชฒเซเชฏเซ‹เชฎเชพเช‚ เชธเช‚เช—เซเชฐเชนเชฟเชค เชกเซ‡เชŸเชพเชฎเชพเช‚เชฅเซ€ เชฌเชจเชพเชตเชตเชพเชฎเชพเช‚ เช†เชตเชถเซ‡.

เชธเซเชชเซเชฐเชฟเชซเซ‡เช•เซเชธเชฟเชธเซ€

เช† เชชเซ‡เช•เซ‡เชœเชจเซ€ เชจเชตเซ€ เช•เชพเชฐเซเชฏเช•เซเชทเชฎเชคเชพ เช›เซ‡ เชตเซเชฏเชตเชธเซเชฅเชฟเชค, เชœเซ‡ เชฒเซ‡เช—เชธเซ€ เช•เชพเชฐเซเชฏเซ‹ เชธเชพเชฅเซ‡ เช•เชพเชฎ เช•เชฐเชคเซ€ เชตเช–เชคเซ‡ เช…เช—เชพเช‰ เช…เชจเซเชชเชฒเชฌเซเชง เชนเชคเซเช‚.

เชธเซเชชเชทเซเชŸเซ€เช•เชฐเชฃ เช เชกเซ‡เชŸเชพ เชซเซเชฐเซ‡เชฎ เช›เซ‡, เชœเซ‡เชจเซ€ เชฆเชฐเซ‡เช• เชชเช‚เช•เซเชคเชฟ เชจเชตเซ€ เช†เช‰เชŸเชชเซเชŸ เชคเชพเชฐเซ€เช– เชซเซเชฐเซ‡เชฎเชฎเชพเช‚ เชเช• เช•เซ‰เชฒเชฎเชจเซ‡ เช…เชจเซเชฒเช•เซเชทเซ‡ เช›เซ‡, เช…เชจเซ‡ เชฌเซ‡ เชตเชฟเชถเชฟเชทเซเชŸ เช•เซ‰เชฒเชฎ เชœเซ‡ เช†เชจเชพเชฅเซ€ เชถเชฐเซ‚ เชฅเชพเชฏ เช›เซ‡:

  • เชจเชพเชฎ เชฎเซ‚เชณ เช•เซ‰เชฒเชฎ เชจเชพเชฎ เชธเชฎเชพเชตเซ‡ เช›เซ‡.
  • .เชฎเซ‚เชฒเซเชฏ เช•เซ‰เชฒเชฎเชจเซเช‚ เชจเชพเชฎ เชธเชฎเชพเชตเซ‡ เช›เซ‡ เชœเซ‡เชฎเชพเช‚ เชธเซ‡เชฒ เชฎเซ‚เชฒเซเชฏเซ‹ เชนเชถเซ‡.

เชธเซเชชเชทเซเชŸเซ€เช•เชฐเชฃเชจเซ€ เชฌเชพเช•เซ€เชจเซ€ เช•เซ‰เชฒเชฎ เชชเซเชฐเชคเชฟเชฌเชฟเช‚เชฌเชฟเชค เช•เชฐเซ‡ เช›เซ‡ เช•เซ‡ เชจเชตเซ€ เช•เซ‰เชฒเชฎ เช•เซ‡เชตเซ€ เชฐเซ€เชคเซ‡ เชธเช‚เช•เซเชšเชฟเชค เช•เซ‰เชฒเชฎเชจเซเช‚ เชจเชพเชฎ เชชเซเชฐเชฆเชฐเซเชถเชฟเชค เช•เชฐเชถเซ‡ เชจเชพเชฎ.

เชธเซเชชเชทเซเชŸเซ€เช•เชฐเชฃ เช•เซ‰เชฒเชฎเชจเชพ เชจเชพเชฎเชฎเชพเช‚ เชธเช‚เช—เซเชฐเชนเชฟเชค เชฎเซ‡เชŸเชพเชกเซ‡เชŸเชพเชจเซเช‚ เชตเชฐเซเชฃเชจ เช•เชฐเซ‡ เช›เซ‡, เชœเซ‡เชฎเชพเช‚ เชฆเชฐเซ‡เช• เช•เซ‰เชฒเชฎ เชฎเชพเชŸเซ‡ เชเช• เชชเช‚เช•เซเชคเชฟ เช…เชจเซ‡ เชฆเชฐเซ‡เช• เชตเซ‡เชฐเชฟเชฏเซ‡เชฌเชฒ เชฎเชพเชŸเซ‡ เชเช• เช•เซ‰เชฒเชฎ, เช•เซ‰เชฒเชฎเชจเชพ เชจเชพเชฎ เชธเชพเชฅเซ‡ เชฎเชณเซ€เชจเซ‡, เช† เชตเซเชฏเชพเช–เซเชฏเชพ เช…เชคเซเชฏเชพเชฐเซ‡ เช—เซ‚เช‚เชšเชตเชฃเชญเชฐเซ€ เชฒเชพเช—เซ‡ เช›เซ‡, เชชเชฐเช‚เชคเซ เชฅเซ‹เชกเชพ เช‰เชฆเชพเชนเชฐเชฃเซ‹ เชœเซ‹เชฏเชพ เชชเช›เซ€ เชคเซ‡ เช˜เชฃเซเช‚ เชฌเชจเซ€ เชœเชถเซ‡. เชธเซเชชเชทเซเชŸ

เชธเซเชชเชทเซเชŸเซ€เช•เชฐเชฃเชจเซ‹ เชฎเซเชฆเซเชฆเซ‹ เช เช›เซ‡ เช•เซ‡ เชคเชฎเซ‡ เชฐเซ‚เชชเชพเช‚เชคเชฐเชฟเชค เชกเซ‡เชŸเชพเชซเซเชฐเซ‡เชฎ เชฎเชพเชŸเซ‡ เชจเชตเชพ เชฎเซ‡เชŸเชพเชกเซ‡เชŸเชพเชจเซ‡ เชชเซเชจเชƒเชชเซเชฐเชพเชชเซเชค, เชธเช‚เชถเซ‹เชงเชฟเชค เช…เชจเซ‡ เชตเซเชฏเชพเช–เซเชฏเชพเชฏเชฟเชค เช•เชฐเซ€ เชถเช•เซ‹ เช›เซ‹.

เช•เซ‹เชทเซเชŸเช•เชจเซ‡ เชตเชฟเชถเชพเชณ เชซเซ‹เชฐเซเชฎเซ‡เชŸเชฎเชพเช‚เชฅเซ€ เชฒเชพเช‚เชฌเชพ เชซเซ‹เชฐเซเชฎเซ‡เชŸเชฎเชพเช‚ เช•เชจเซเชตเชฐเซเชŸ เช•เชฐเชคเซ€ เชตเช–เชคเซ‡ เชตเชฟเชถเชฟเชทเซเชŸเชคเชพเช“ เชธเชพเชฅเซ‡ เช•เชพเชฎ เช•เชฐเชตเชพ เชฎเชพเชŸเซ‡, เชซเช‚เช•เซเชถเชจเชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ‹ pivot_longer_spec().

เช† เช•เชพเชฐเซเชฏ เช•เซ‡เชตเซ€ เชฐเซ€เชคเซ‡ เช•เชพเชฐเซเชฏ เช•เชฐเซ‡ เช›เซ‡ เชคเซ‡ เช เช›เซ‡ เช•เซ‡ เชคเซ‡ เช•เซ‹เชˆเชชเชฃ เชคเชพเชฐเซ€เช– เชซเซเชฐเซ‡เชฎ เชฒเซ‡ เช›เซ‡ เช…เชจเซ‡ เช‰เชชเชฐ เชตเชฐเซเชฃเชตเซ‡เชฒ เชฐเซ€เชคเซ‡ เชคเซ‡เชจเซ‹ เชฎเซ‡เชŸเชพเชกเซ‡เชŸเชพ เชœเชจเชฐเซ‡เชŸ เช•เชฐเซ‡ เช›เซ‡.

เช‰เชฆเชพเชนเชฐเชฃ เชคเชฐเซ€เช•เซ‡, เชšเชพเชฒเซ‹ เชชเซ‡เช•เซ‡เชœ เชธเชพเชฅเซ‡ เชชเซเชฐเชฆเชพเชจ เช•เชฐเชพเชฏเซ‡เชฒ เชกเซ‡เชŸเชพเชธเซ‡เชŸเชจเซ‡ เชฒเชˆเช เชตเซเชฏเชตเชธเซเชฅเชฟเชค. เช† เชกเซ‡เชŸเชพเชธเซ‡เชŸเชฎเชพเช‚ เช•เซเชทเชฏ เชฐเซ‹เช—เชจเซ€ เช˜เชŸเชจเชพเช“ เชชเชฐ เช†เช‚เชคเชฐเชฐเชพเชทเซเชŸเซเชฐเซ€เชฏ เช†เชฐเซ‹เช—เซเชฏ เชธเช‚เชธเซเชฅเชพ เชฆเซเชตเชพเชฐเชพ เชชเซเชฐเชฆเชพเชจ เช•เชฐเชตเชพเชฎเชพเช‚ เช†เชตเซ‡เชฒเซ€ เชฎเชพเชนเชฟเชคเซ€ เชถเชพเชฎเซ‡เชฒ เช›เซ‡.

who
#> # A tibble: 7,240 x 60
#>    country iso2  iso3   year new_sp_m014 new_sp_m1524 new_sp_m2534
#>    <chr>   <chr> <chr> <int>       <int>        <int>        <int>
#>  1 Afghanโ€ฆ AF    AFG    1980          NA           NA           NA
#>  2 Afghanโ€ฆ AF    AFG    1981          NA           NA           NA
#>  3 Afghanโ€ฆ AF    AFG    1982          NA           NA           NA
#>  4 Afghanโ€ฆ AF    AFG    1983          NA           NA           NA
#>  5 Afghanโ€ฆ AF    AFG    1984          NA           NA           NA
#>  6 Afghanโ€ฆ AF    AFG    1985          NA           NA           NA
#>  7 Afghanโ€ฆ AF    AFG    1986          NA           NA           NA
#>  8 Afghanโ€ฆ AF    AFG    1987          NA           NA           NA
#>  9 Afghanโ€ฆ AF    AFG    1988          NA           NA           NA
#> 10 Afghanโ€ฆ AF    AFG    1989          NA           NA           NA
#> # โ€ฆ with 7,230 more rows, and 53 more variables

เชšเชพเชฒเซ‹ เชคเซ‡เชจเซ€ เชธเซเชชเชทเซเชŸเซ€เช•เชฐเชฃ เชฌเชจเชพเชตเซ€เช.

spec <- who %>%
  pivot_longer_spec(new_sp_m014:newrel_f65, values_to = "count")

#> # A tibble: 56 x 3
#>    .name        .value name        
#>    <chr>        <chr>  <chr>       
#>  1 new_sp_m014  count  new_sp_m014 
#>  2 new_sp_m1524 count  new_sp_m1524
#>  3 new_sp_m2534 count  new_sp_m2534
#>  4 new_sp_m3544 count  new_sp_m3544
#>  5 new_sp_m4554 count  new_sp_m4554
#>  6 new_sp_m5564 count  new_sp_m5564
#>  7 new_sp_m65   count  new_sp_m65  
#>  8 new_sp_f014  count  new_sp_f014 
#>  9 new_sp_f1524 count  new_sp_f1524
#> 10 new_sp_f2534 count  new_sp_f2534
#> # โ€ฆ with 46 more rows

เช•เซเชทเซ‡เชคเซเชฐเซ‹ เชฆเซ‡เชถ, isoxnumx, isoxnumx เชชเชนเซ‡เชฒเซ‡เชฅเซ€ เชšเชฒ เช›เซ‡. เช…เชฎเชพเชฐเซเช‚ เช•เชพเชฐเซเชฏ เช•เซ‰เชฒเชฎเซเชธ เชธเชพเชฅเซ‡ เชซเซเชฒเชฟเชช เช•เชฐเชตเชพเชจเซเช‚ เช›เซ‡ new_sp_m014 เชชเชฐ newrel_f65.

เช† เช•เซ‰เชฒเชฎเชจเชพ เชจเชพเชฎ เชจเซ€เชšเซ‡เชจเซ€ เชฎเชพเชนเชฟเชคเซ€ เชธเช‚เช—เซเชฐเชนเชฟเชค เช•เชฐเซ‡ เช›เซ‡:

  • เช‰เชชเชธเชฐเซเช— new_ เชธเซ‚เชšเชตเซ‡ เช›เซ‡ เช•เซ‡ เช•เซ‹เชฒเชฎเชฎเชพเช‚ เช•เซเชทเชฏ เชฐเซ‹เช—เชจเชพ เชจเชตเชพ เช•เซ‡เชธเซ‹เชจเซ‹ เชกเซ‡เชŸเชพ เช›เซ‡, เชตเชฐเซเชคเชฎเชพเชจ เชคเชพเชฐเซ€เช– เชซเซเชฐเซ‡เชฎเชฎเชพเช‚ เชซเช•เซเชค เชจเชตเชพ เชฐเซ‹เช—เซ‹เชจเซ€ เชฎเชพเชนเชฟเชคเซ€ เช›เซ‡, เชคเซ‡เชฅเซ€ เชตเชฐเซเชคเชฎเชพเชจ เชธเช‚เชฆเชฐเซเชญเชฎเชพเช‚ เช† เช‰เชชเชธเชฐเซเช—เชจเซ‹ เช•เซ‹เชˆ เช…เชฐเซเชฅ เชจเชฅเซ€.
  • sp/rel/sp/ep เชฐเซ‹เช—เชจเชพ เชจเชฟเชฆเชพเชจ เชฎเชพเชŸเซ‡เชจเซ€ เชชเชฆเซเชงเชคเชฟเชจเซเช‚ เชตเชฐเซเชฃเชจ เช•เชฐเซ‡ เช›เซ‡.
  • m/f เชฆเชฐเซเชฆเซ€เชจเซเช‚ เชฒเชฟเช‚เช—.
  • 014/1524/2535/3544/4554/65 เชฆเชฐเซเชฆเซ€เชจเซ€ เชตเชฏ เชถเซเชฐเซ‡เชฃเซ€.

เช†เชชเชฃเซ‡ เชซเช‚เช•เซเชถเชจเชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ€เชจเซ‡ เช† เช•เซ‹เชฒเชฎเชจเซ‡ เชตเชฟเชญเชพเชœเชฟเชค เช•เชฐเซ€ เชถเช•เซ€เช เช›เซ€เช extract()เชจเชฟเชฏเชฎเชฟเชค เช…เชญเชฟเชตเซเชฏเช•เซเชคเชฟเชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ€เชจเซ‡.

spec <- spec %>%
        extract(name, c("diagnosis", "gender", "age"), "new_?(.*)_(.)(.*)")

#> # A tibble: 56 x 5
#>    .name        .value diagnosis gender age  
#>    <chr>        <chr>  <chr>     <chr>  <chr>
#>  1 new_sp_m014  count  sp        m      014  
#>  2 new_sp_m1524 count  sp        m      1524 
#>  3 new_sp_m2534 count  sp        m      2534 
#>  4 new_sp_m3544 count  sp        m      3544 
#>  5 new_sp_m4554 count  sp        m      4554 
#>  6 new_sp_m5564 count  sp        m      5564 
#>  7 new_sp_m65   count  sp        m      65   
#>  8 new_sp_f014  count  sp        f      014  
#>  9 new_sp_f1524 count  sp        f      1524 
#> 10 new_sp_f2534 count  sp        f      2534 
#> # โ€ฆ with 46 more rows

เช•เซƒเชชเชพ เช•เชฐเซ€เชจเซ‡ เช•เซ‰เชฒเชฎ เชจเซ‹เช‚เชงเซ‹ เชจเชพเชฎ เชฎเซ‚เชณ เชกเซ‡เชŸเชพเชธเซ‡เชŸเชจเชพ เช•เซ‰เชฒเชฎ เชจเชพเชฎเซ‹เชฎเชพเช‚ เช† เช…เชฎเชพเชฐเซเช‚ เช…เชจเซเช•เซเชฐเชฎเชฃเชฟเช•เชพ เชนเซ‹เชตเชพเชฅเซ€ เชฏเชฅเชพเชตเชค เชฐเชนเซ‡เชตเซเช‚ เชœเซ‹เชˆเช.

เชฒเชฟเช‚เช— เช…เชจเซ‡ เช‰เช‚เชฎเชฐ (เช•เซ‰เชฒเชฎเซเชธ เชฒเชฟเช‚เช— ะธ เช‰เช‚เชฎเชฐ) เชชเชพเชธเซ‡ เชจเชฟเชถเซเชšเชฟเชค เช…เชจเซ‡ เชœเชพเชฃเซ€เชคเชพ เชฎเซ‚เชฒเซเชฏเซ‹ เช›เซ‡, เชคเซ‡เชฅเซ€ เช† เช•เซ‰เชฒเชฎเชจเซ‡ เชชเชฐเชฟเชฌเชณเซ‹เชฎเชพเช‚ เช•เชจเซเชตเชฐเซเชŸ เช•เชฐเชตเชพเชจเซ€ เชญเชฒเชพเชฎเชฃ เช•เชฐเชตเชพเชฎเชพเช‚ เช†เชตเซ‡ เช›เซ‡:

spec <-  spec %>%
            mutate(
              gender = factor(gender, levels = c("f", "m")),
              age = factor(age, levels = unique(age), ordered = TRUE)
            ) 

เช›เซ‡เชฒเซเชฒเซ‡, เช…เชฎเซ‡ เชฎเซ‚เชณ เชคเชพเชฐเซ€เช– เชซเซเชฐเซ‡เชฎ เชชเชฐ เชฌเชจเชพเชตเซ‡เชฒ เชธเซเชชเชทเซเชŸเซ€เช•เชฐเชฃ เชฒเชพเช—เซ เช•เชฐเชตเชพ เชฎเชพเชŸเซ‡ เชœเซ‡ เช†เชชเชฃเซ‡ เชฆเชฒเซ€เชฒเชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเชตเชพเชจเซ€ เชœเชฐเซ‚เชฐ เช›เซ‡ เชธเซเชชเซ‡เช• เช•เชพเชฐเซเชฏเชฎเชพเช‚ pivot_longer().

who %>% pivot_longer(spec = spec)

#> # A tibble: 405,440 x 8
#>    country     iso2  iso3   year diagnosis gender age   count
#>    <chr>       <chr> <chr> <int> <chr>     <fct>  <ord> <int>
#>  1 Afghanistan AF    AFG    1980 sp        m      014      NA
#>  2 Afghanistan AF    AFG    1980 sp        m      1524     NA
#>  3 Afghanistan AF    AFG    1980 sp        m      2534     NA
#>  4 Afghanistan AF    AFG    1980 sp        m      3544     NA
#>  5 Afghanistan AF    AFG    1980 sp        m      4554     NA
#>  6 Afghanistan AF    AFG    1980 sp        m      5564     NA
#>  7 Afghanistan AF    AFG    1980 sp        m      65       NA
#>  8 Afghanistan AF    AFG    1980 sp        f      014      NA
#>  9 Afghanistan AF    AFG    1980 sp        f      1524     NA
#> 10 Afghanistan AF    AFG    1980 sp        f      2534     NA
#> # โ€ฆ with 405,430 more rows

เช…เชฎเซ‡ เชนเชฎเชฃเชพเช‚ เชœเซ‡ เช•เชฐเซเชฏเซเช‚ เช›เซ‡ เชคเซ‡ เชฌเชงเซเช‚ เชจเซ€เชšเซ‡ เชชเซเชฐเชฎเชพเชฃเซ‡ เชฏเซ‹เชœเชจเชพเช•เซ€เชฏ เชฐเซ€เชคเซ‡ เชฆเชฐเซเชถเชพเชตเซ€ เชถเช•เชพเชฏ เช›เซ‡:

R เชชเซ‡เช•เซ‡เชœ tidyr เช…เชจเซ‡ เชคเซ‡เชจเชพ เชจเชตเชพ เช•เชพเชฐเซเชฏเซ‹ pivot_longer เช…เชจเซ‡ pivot_wider

เชฌเชนเซเชตเชฟเชง เชฎเซ‚เชฒเซเชฏเซ‹เชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ€เชจเซ‡ เชธเซเชชเชทเซเชŸเซ€เช•เชฐเชฃ (.value)

เช‰เชชเชฐเชจเชพ เช‰เชฆเชพเชนเชฐเชฃเชฎเชพเช‚, เชธเซเชชเชทเซเชŸเซ€เช•เชฐเชฃ เช•เซ‰เชฒเชฎ .เชฎเซ‚เชฒเซเชฏ เชฎเชพเชคเซเชฐ เชเช• เชฎเซ‚เชฒเซเชฏ เชงเชฐเชพเชตเซ‡ เช›เซ‡, เชฎเซ‹เชŸเชพเชญเชพเช—เชจเชพ เช•เชฟเชธเซเชธเชพเช“เชฎเชพเช‚ เช† เช•เซ‡เชธ เช›เซ‡.

เชชเชฐเช‚เชคเซ เชชเซเชฐเชธเช‚เช—เซ‹เชชเชพเชค เชเชตเซ€ เชชเชฐเชฟเชธเซเชฅเชฟเชคเชฟ เชŠเชญเซ€ เชฅเชˆ เชถเช•เซ‡ เช›เซ‡ เชœเซเชฏเชพเชฐเซ‡ เชคเชฎเชพเชฐเซ‡ เชฎเซ‚เชฒเซเชฏเซ‹เชฎเชพเช‚ เชตเชฟเชตเชฟเชง เชกเซ‡เชŸเชพ เชชเซเชฐเช•เชพเชฐเซ‹ เชธเชพเชฅเซ‡ เช•เซ‰เชฒเชฎเชฎเชพเช‚เชฅเซ€ เชกเซ‡เชŸเชพ เชเช•เชคเซเชฐเชฟเชค เช•เชฐเชตเชพเชจเซ€ เชœเชฐเซ‚เชฐ เชนเซ‹เชฏ. เชฒเซ‡เช—เชธเซ€ เชซเช‚เช•เซเชถเชจเชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเชตเซ‹ spread() เช† เช•เชฐเชตเซเช‚ เช–เซ‚เชฌ เชฎเซเชถเซเช•เซ‡เชฒ เชนเชถเซ‡.

เชจเซ€เชšเซ‡เชจเซเช‚ เช‰เชฆเชพเชนเชฐเชฃ เชฎเชพเช‚เชฅเซ€ เชฒเซ‡เชตเชพเชฎเชพเช‚ เช†เชตเซเชฏเซเช‚ เช›เซ‡ เชตเชฟเช—เซเชจเซ‡เชŸ เชชเซ‡เช•เซ‡เชœ เชฎเชพเชŸเซ‡ เชกเซ‡เชŸเชพ.เชŸเซ‡เชฌเชฒ.

เชšเชพเชฒเซ‹ เชคเชพเชฒเซ€เชฎ เชกเซ‡เชŸเชพเชซเซเชฐเซ‡เชฎ เชฌเชจเชพเชตเซ€เช.

family <- tibble::tribble(
  ~family,  ~dob_child1,  ~dob_child2, ~gender_child1, ~gender_child2,
       1L, "1998-11-26", "2000-01-29",             1L,             2L,
       2L, "1996-06-22",           NA,             2L,             NA,
       3L, "2002-07-11", "2004-04-05",             2L,             2L,
       4L, "2004-10-10", "2009-08-27",             1L,             1L,
       5L, "2000-12-05", "2005-02-28",             2L,             1L,
)
family <- family %>% mutate_at(vars(starts_with("dob")), parse_date)

#> # A tibble: 5 x 5
#>   family dob_child1 dob_child2 gender_child1 gender_child2
#>    <int> <date>     <date>             <int>         <int>
#> 1      1 1998-11-26 2000-01-29             1             2
#> 2      2 1996-06-22 NA                     2            NA
#> 3      3 2002-07-11 2004-04-05             2             2
#> 4      4 2004-10-10 2009-08-27             1             1
#> 5      5 2000-12-05 2005-02-28             2             1

เชฌเชจเชพเชตเซ‡เชฒ เชคเชพเชฐเซ€เช– เชซเซเชฐเซ‡เชฎเชฎเชพเช‚ เชฆเชฐเซ‡เช• เชฒเชพเช‡เชจเชฎเชพเช‚ เชเช• เชชเชฐเชฟเชตเชพเชฐเชจเชพ เชฌเชพเชณเช•เซ‹เชจเซ‹ เชกเซ‡เชŸเชพ เช›เซ‡. เช•เซเชŸเซเช‚เชฌเชฎเชพเช‚ เชเช• เช•เซ‡ เชฌเซ‡ เชฌเชพเชณเช•เซ‹ เชนเซ‹เชˆ เชถเช•เซ‡ เช›เซ‡. เชฆเชฐเซ‡เช• เชฌเชพเชณเช• เชฎเชพเชŸเซ‡, เชœเชจเซเชฎ เชคเชพเชฐเซ€เช– เช…เชจเซ‡ เชฒเชฟเช‚เช— เชชเชฐ เชกเซ‡เชŸเชพ เชชเซเชฐเชฆเชพเชจ เช•เชฐเชตเชพเชฎเชพเช‚ เช†เชตเซ‡ เช›เซ‡, เช…เชจเซ‡ เชฆเชฐเซ‡เช• เชฌเชพเชณเช• เชฎเชพเชŸเซ‡เชจเซ‹ เชกเซ‡เชŸเชพ เช…เชฒเช— เช•เซ‰เชฒเชฎเชฎเชพเช‚ เช›เซ‡; เช…เชฎเชพเชฐเซเช‚ เช•เชพเชฐเซเชฏ เชตเชฟเชถเซเชฒเซ‡เชทเชฃ เชฎเชพเชŸเซ‡ เช† เชกเซ‡เชŸเชพเชจเซ‡ เชฏเซ‹เช—เซเชฏ เชซเซ‹เชฐเซเชฎเซ‡เชŸเชฎเชพเช‚ เชฒเชพเชตเชตเชพเชจเซเช‚ เช›เซ‡.

เชฎเชนเซ‡เชฐเชฌเชพเชจเซ€ เช•เชฐเซ€เชจเซ‡ เชจเซ‹เช‚เชง เช•เชฐเซ‹ เช•เซ‡ เชฆเชฐเซ‡เช• เชฌเชพเชณเช• เชตเชฟเชถเซ‡เชจเซ€ เชฎเชพเชนเชฟเชคเซ€ เชธเชพเชฅเซ‡ เช…เชฎเชพเชฐเซ€ เชชเชพเชธเซ‡ เชฌเซ‡ เชšเชฒเซ‹ เช›เซ‡: เชคเซ‡เชฎเชจเซเช‚ เชฒเชฟเช‚เช— เช…เชจเซ‡ เชœเชจเซเชฎ เชคเชพเชฐเซ€เช– (เช‰เชชเชธเชฐเซเช— เชธเชพเชฅเซ‡ เช•เซ‰เชฒเชฎ เชกเซ‹เชช เชœเชจเซเชฎ เชคเชพเชฐเซ€เช–, เช‰เชชเชธเชฐเซเช— เชธเชพเชฅเซ‡ เช•เซ‰เชฒเชฎ เชธเชฎเชพเชตเซ‡ เช›เซ‡ เชฒเชฟเช‚เช— เชฌเชพเชณเช•เชจเซเช‚ เชฒเชฟเช‚เช— เชธเชฎเชพเชตเซ‡ เช›เซ‡). เช…เชชเซ‡เช•เซเชทเชฟเชค เชชเชฐเชฟเชฃเชพเชฎ เช เช›เซ‡ เช•เซ‡ เชคเซ‡เช“ เช…เชฒเช— เช•เซ‰เชฒเชฎเชฎเชพเช‚ เชฆเซ‡เช–เชพเชตเชพ เชœเซ‹เชˆเช. เช…เชฎเซ‡ เชเช• เชธเซเชชเชทเซเชŸเซ€เช•เชฐเชฃ เชœเชจเชฐเซ‡เชŸ เช•เชฐเซ€เชจเซ‡ เช† เช•เชฐเซ€ เชถเช•เซ€เช เช›เซ€เช เชœเซ‡เชฎเชพเช‚ เช•เซ‰เชฒเชฎ .value เชฌเซ‡ เช…เชฒเช— เช…เชฒเช— เช…เชฐเซเชฅ เชนเชถเซ‡.

spec <- family %>%
  pivot_longer_spec(-family) %>%
  separate(col = name, into = c(".value", "child"))%>%
  mutate(child = parse_number(child))

#> # A tibble: 4 x 3
#>   .name         .value child
#>   <chr>         <chr>  <dbl>
#> 1 dob_child1    dob        1
#> 2 dob_child2    dob        2
#> 3 gender_child1 gender     1
#> 4 gender_child2 gender     2

เชคเซ‡เชฅเซ€, เชšเชพเชฒเซ‹ เช‰เชชเชฐเซ‹เช•เซเชค เช•เซ‹เชก เชฆเซเชตเชพเชฐเชพ เช•เชฐเชตเชพเชฎเชพเช‚ เช†เชตเชคเซ€ เช•เซเชฐเชฟเชฏเชพเช“ เชชเชฐ เชเช• เชชเช—เชฒเซเช‚-เชฆเชฐ-เชชเช—เชฒเชพเช‚ เชœเซ‹เชˆเช.

  • pivot_longer_spec(-family) - เชเช• เชธเซเชชเชทเซเชŸเซ€เช•เชฐเชฃ เชฌเชจเชพเชตเซ‹ เช•เซ‡ เชœเซ‡ เชซเซ‡เชฎเชฟเชฒเซ€ เช•เซ‹เชฒเชฎ เชธเชฟเชตเชพเชฏเชจเชพ เชคเชฎเชพเชฎ เชตเชฐเซเชคเชฎเชพเชจ เช•เซ‰เชฒเชฎเชจเซ‡ เชธเช‚เช•เซเชšเชฟเชค เช•เชฐเซ‡.
  • separate(col = name, into = c(".value", "child")) - เช•เซ‰เชฒเชฎ เชตเชฟเชญเชพเชœเชฟเชค เช•เชฐเซ‹ เชจเชพเชฎ, เชœเซ‡เชฎเชพเช‚ เช…เช‚เชกเชฐเชธเซเช•เซ‹เชฐเชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ€เชจเซ‡ เช…เชจเซ‡ เชชเชฐเชฟเชฃเชพเชฎเซ€ เชฎเซ‚เชฒเซเชฏเซ‹เชจเซ‡ เช•เซ‰เชฒเชฎเชฎเชพเช‚ เชฆเชพเช–เชฒ เช•เชฐเซ€เชจเซ‡, เชธเซเชคเซเชฐเซ‹เชค เช•เซเชทเซ‡เชคเซเชฐเซ‹เชจเชพ เชจเชพเชฎเซ‹ เชถเชพเชฎเซ‡เชฒ เช›เซ‡ .เชฎเซ‚เชฒเซเชฏ ะธ เชฌเชพเชณเช•.
  • mutate(child = parse_number(child)) - เชซเซ€เชฒเซเชก เชฎเซ‚เชฒเซเชฏเซ‹เชจเซ‡ เชฐเซ‚เชชเชพเช‚เชคเชฐเชฟเชค เช•เชฐเซ‹ เชฌเชพเชณเช• เชŸเซ‡เช•เซเชธเซเชŸเชฅเซ€ เช†เช‚เช•เชกเชพเช•เซ€เชฏ เชกเซ‡เชŸเชพ เชชเซเชฐเช•เชพเชฐ เชธเซเชงเซ€.

เชนเชตเซ‡ เช†เชชเชฃเซ‡ เชชเชฐเชฟเชฃเชพเชฎเซ€ เชธเซเชชเชทเซเชŸเซ€เช•เชฐเชฃเชจเซ‡ เชฎเซ‚เชณ เชกเซ‡เชŸเชพเชซเซเชฐเซ‡เชฎ เชชเชฐ เชฒเชพเช—เซ เช•เชฐเซ€ เชถเช•เซ€เช เช›เซ€เช เช…เชจเซ‡ เชŸเซ‡เชฌเชฒเชจเซ‡ เช‡เชšเซเช›เชฟเชค เชธเซเชตเชฐเซ‚เชชเชฎเชพเช‚ เชฒเชพเชตเซ€ เชถเช•เซ€เช เช›เซ€เช.

family %>% 
    pivot_longer(spec = spec, na.rm = T)

#> # A tibble: 9 x 4
#>   family child dob        gender
#>    <int> <dbl> <date>      <int>
#> 1      1     1 1998-11-26      1
#> 2      1     2 2000-01-29      2
#> 3      2     1 1996-06-22      2
#> 4      3     1 2002-07-11      2
#> 5      3     2 2004-04-05      2
#> 6      4     1 2004-10-10      1
#> 7      4     2 2009-08-27      1
#> 8      5     1 2000-12-05      2
#> 9      5     2 2005-02-28      1

เช…เชฎเซ‡ เชฆเชฒเซ€เชฒเชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ€เช เช›เซ€เช na.rm = TRUE, เช•เชพเชฐเชฃ เช•เซ‡ เชกเซ‡เชŸเชพเชจเซเช‚ เชตเชฐเซเชคเชฎเชพเชจ เชธเซเชตเชฐเซ‚เชช เช…เชธเซเชคเชฟเชคเซเชตเชฎเชพเช‚ เชจเชฅเซ€ เชคเซ‡เชตเชพ เช…เชตเชฒเซ‹เช•เชจเซ‹ เชฎเชพเชŸเซ‡ เชตเชงเชพเชฐเชพเชจเซ€ เชชเช‚เช•เซเชคเชฟเช“ เชฌเชจเชพเชตเชตเชพเชจเซ€ เชซเชฐเชœ เชชเชพเชกเซ‡ เช›เซ‡. เช•เชพเชฐเชฃ เช•เซ‡ เช•เซเชŸเซเช‚เชฌ 2 เชฎเชพเช‚ เชเช• เชœ เชฌเชพเชณเช• เช›เซ‡, na.rm = TRUE เชฌเชพเช‚เชฏเชงเชฐเซ€ เช†เชชเซ‡ เช›เซ‡ เช•เซ‡ เช•เซเชŸเซเช‚เชฌ 2 เชจเซ€ เช†เช‰เชŸเชชเซเชŸเชฎเชพเช‚ เชเช• เชชเช‚เช•เซเชคเชฟ เชนเชถเซ‡.

เชคเชพเชฐเซ€เช– เชซเซเชฐเซ‡เชฎเซเชธเชจเซ‡ เชฒเชพเช‚เชฌเชพเชฎเชพเช‚เชฅเซ€ เชตเชฟเชถเชพเชณ เชซเซ‹เชฐเซเชฎเซ‡เชŸเชฎเชพเช‚ เชฐเซ‚เชชเชพเช‚เชคเชฐเชฟเชค เช•เชฐเซ€ เชฐเชนเซเชฏเชพเช‚ เช›เซ‡

pivot_wider() - เช เชตเซเชฏเชธเซเชค เชฐเซ‚เชชเชพเช‚เชคเชฐ เช›เซ‡, เช…เชจเซ‡ เชŠเชฒเชŸเซเช‚ เชชเช‚เช•เซเชคเชฟเช“เชจเซ€ เชธเช‚เช–เซเชฏเชพ เช˜เชŸเชพเชกเซ€เชจเซ‡ เชคเชพเชฐเซ€เช– เชซเซเชฐเซ‡เชฎเชจเชพ เช•เซ‰เชฒเชฎเชจเซ€ เชธเช‚เช–เซเชฏเชพเชฎเชพเช‚ เชตเชงเชพเชฐเซ‹ เช•เชฐเซ‡ เช›เซ‡.

R เชชเซ‡เช•เซ‡เชœ tidyr เช…เชจเซ‡ เชคเซ‡เชจเชพ เชจเชตเชพ เช•เชพเชฐเซเชฏเซ‹ pivot_longer เช…เชจเซ‡ pivot_wider

เชกเซ‡เชŸเชพเชจเซ‡ เชธเซเช˜เชก เชธเซเชตเชฐเซ‚เชชเชฎเชพเช‚ เชฒเชพเชตเชตเชพ เชฎเชพเชŸเซ‡ เช† เชชเซเชฐเช•เชพเชฐเชจเชพ เชฐเซ‚เชชเชพเช‚เชคเชฐเชฃเชจเซ‹ เชญเชพเช—เซเชฏเซ‡ เชœ เช‰เชชเชฏเซ‹เช— เชฅเชพเชฏ เช›เซ‡, เชœเซ‹ เช•เซ‡, เช† เชคเช•เชจเซ€เช• เชชเซเชฐเชธเซเชคเซเชคเชฟเช“เชฎเชพเช‚ เช‰เชชเชฏเซ‹เช—เชฎเชพเช‚ เชฒเซ‡เชตเชพเชคเชพ เชชเชฟเชตเชŸ เช•เซ‹เชทเซเชŸเช•เซ‹ เชฌเชจเชพเชตเชตเชพ เช…เชฅเชตเชพ เช•เซ‡เชŸเชฒเชพเช• เช…เชจเซเชฏ เชธเชพเชงเชจเซ‹ เชธเชพเชฅเซ‡ เชธเช‚เช•เชฒเชจ เช•เชฐเชตเชพ เชฎเชพเชŸเซ‡ เช‰เชชเชฏเซ‹เช—เซ€ เชฅเชˆ เชถเช•เซ‡ เช›เซ‡.

เช–เชฐเซ‡เช–เชฐ เช•เชพเชฐเซเชฏเซ‹ pivot_longer() ะธ pivot_wider() เชธเชชเซเชฐเชฎเชพเชฃ เช›เซ‡, เช…เชจเซ‡ เช•เซเชฐเชฟเชฏเชพเช“ เชเช•เชฌเซ€เชœเชพเชฅเซ€ เชตเชฟเชชเชฐเซ€เชค เชชเซ‡เชฆเชพ เช•เชฐเซ‡ เช›เซ‡, เชเชŸเชฒเซ‡ เช•เซ‡: df %>% pivot_longer(spec = spec) %>% pivot_wider(spec = spec) ะธ df %>% pivot_wider(spec = spec) %>% pivot_longer(spec = spec) เชฎเซ‚เชณ เชกเซ€เชเชซ เชชเชฐเชค เช•เชฐเชถเซ‡.

เช•เซ‹เชทเซเชŸเช•เชจเซ‡ เชตเชฟเชถเชพเชณ เชซเซ‹เชฐเซเชฎเซ‡เชŸเชฎเชพเช‚ เช•เชจเซเชตเชฐเซเชŸ เช•เชฐเชตเชพเชจเซเช‚ เชธเซŒเชฅเซ€ เชธเชฐเชณ เช‰เชฆเชพเชนเชฐเชฃ

เช•เชพเชฐเซเชฏ เช•เซ‡เชตเซ€ เชฐเซ€เชคเซ‡ เช•เชพเชฐเซเชฏ เช•เชฐเซ‡ เช›เซ‡ เชคเซ‡ เชฆเชฐเซเชถเชพเชตเชตเชพ เชฎเชพเชŸเซ‡ pivot_wider() เช…เชฎเซ‡ เชกเซ‡เชŸเชพเชธเซ‡เชŸเชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ€เชถเซเช‚ เชฎเชพเช›เชฒเซ€เช“, เชœเซ‡ เชตเชฟเชตเชฟเชง เชธเซเชŸเซ‡เชถเชจเซ‹ เชจเชฆเซ€เชฎเชพเช‚ เชฎเชพเช›เชฒเซ€เช“เชจเซ€ เชนเชฟเชฒเชšเชพเชฒ เช•เซ‡เชตเซ€ เชฐเซ€เชคเซ‡ เชฐเซ‡เช•เซ‹เชฐเซเชก เช•เชฐเซ‡ เช›เซ‡ เชคเซ‡เชจเซ€ เชฎเชพเชนเชฟเชคเซ€ เชธเช‚เช—เซเชฐเชนเชฟเชค เช•เชฐเซ‡ เช›เซ‡.

#> # A tibble: 114 x 3
#>    fish  station  seen
#>    <fct> <fct>   <int>
#>  1 4842  Release     1
#>  2 4842  I80_1       1
#>  3 4842  Lisbon      1
#>  4 4842  Rstr        1
#>  5 4842  Base_TD     1
#>  6 4842  BCE         1
#>  7 4842  BCW         1
#>  8 4842  BCE2        1
#>  9 4842  BCW2        1
#> 10 4842  MAE         1
#> # โ€ฆ with 104 more rows

เชฎเซ‹เชŸเชพ เชญเชพเช—เชจเชพ เช•เชฟเชธเซเชธเชพเช“เชฎเชพเช‚, เช† เช•เซ‹เชทเซเชŸเช• เชตเชงเซ เชฎเชพเชนเชฟเชคเซ€เชชเซเชฐเชฆ เช…เชจเซ‡ เช‰เชชเชฏเซ‹เช—เชฎเชพเช‚ เชธเชฐเชณ เชนเชถเซ‡ เชœเซ‹ เชคเชฎเซ‡ เชฆเชฐเซ‡เช• เชธเซเชŸเซ‡เชถเชจ เชฎเชพเชŸเซ‡เชจเซ€ เชฎเชพเชนเชฟเชคเซ€ เช…เชฒเช— เช•เซ‰เชฒเชฎเชฎเชพเช‚ เชฐเชœเซ‚ เช•เชฐเซ‹ เช›เซ‹.

fish_encounters %>% pivot_wider(names_from = station, values_from = seen)

fish_encounters %>% pivot_wider(names_from = station, values_from = seen)
#> # A tibble: 19 x 12
#>    fish  Release I80_1 Lisbon  Rstr Base_TD   BCE   BCW  BCE2  BCW2   MAE
#>    <fct>   <int> <int>  <int> <int>   <int> <int> <int> <int> <int> <int>
#>  1 4842        1     1      1     1       1     1     1     1     1     1
#>  2 4843        1     1      1     1       1     1     1     1     1     1
#>  3 4844        1     1      1     1       1     1     1     1     1     1
#>  4 4845        1     1      1     1       1    NA    NA    NA    NA    NA
#>  5 4847        1     1      1    NA      NA    NA    NA    NA    NA    NA
#>  6 4848        1     1      1     1      NA    NA    NA    NA    NA    NA
#>  7 4849        1     1     NA    NA      NA    NA    NA    NA    NA    NA
#>  8 4850        1     1     NA     1       1     1     1    NA    NA    NA
#>  9 4851        1     1     NA    NA      NA    NA    NA    NA    NA    NA
#> 10 4854        1     1     NA    NA      NA    NA    NA    NA    NA    NA
#> # โ€ฆ with 9 more rows, and 1 more variable: MAW <int>

เช† เชกเซ‡เชŸเชพ เชธเซ‡เชŸ เชฎเชพเชคเซเชฐ เชคเซเชฏเชพเชฐเซ‡ เชœ เชฎเชพเชนเชฟเชคเซ€ เชฐเซ‡เช•เซ‹เชฐเซเชก เช•เชฐเซ‡ เช›เซ‡ เชœเซเชฏเชพเชฐเซ‡ เชธเซเชŸเซ‡เชถเชจ เชฆเซเชตเชพเชฐเชพ เชฎเชพเช›เชฒเซ€เช“ เชฎเชณเซ€ เช†เชตเซ€ เชนเซ‹เชฏ, เชเชŸเชฒเซ‡ เช•เซ‡. เชœเซ‹ เช•เซ‹เชˆ เชธเซเชŸเซ‡เชถเชจ เชฆเซเชตเชพเชฐเชพ เช•เซ‹เชˆ เชฎเชพเช›เชฒเซ€ เชฐเซ‡เช•เซ‹เชฐเซเชก เช•เชฐเชตเชพเชฎเชพเช‚ เช†เชตเซ€ เชจ เชนเซ‹เชฏ, เชคเซ‹ เช† เชกเซ‡เชŸเชพ เช•เซ‹เชทเซเชŸเช•เชฎเชพเช‚ เชฐเชนเซ‡เชถเซ‡ เชจเชนเซ€เช‚. เช†เชจเซ‹ เช…เชฐเซเชฅ เช เช›เซ‡ เช•เซ‡ เช†เช‰เชŸเชชเซเชŸ NA เชธเชพเชฅเซ‡ เชญเชฐเชตเชพเชฎเชพเช‚ เช†เชตเชถเซ‡.

เชœเซ‹ เช•เซ‡, เช† เช•เชฟเชธเซเชธเชพเชฎเชพเช‚ เช†เชชเชฃเซ‡ เชœเชพเชฃเซ€เช เช›เซ€เช เช•เซ‡ เชฐเซ‡เช•เซ‹เชฐเซเชกเชจเซ€ เช—เซ‡เชฐเชนเชพเชœเชฐเซ€เชจเซ‹ เช…เชฐเซเชฅ เช เช›เซ‡ เช•เซ‡ เชฎเชพเช›เชฒเซ€ เชœเซ‹เชตเชพเชฎเชพเช‚ เช†เชตเซ€ เชจ เชนเชคเซ€, เชคเซ‡เชฅเซ€ เช…เชฎเซ‡ เชฆเชฒเซ€เชฒเชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ€ เชถเช•เซ€เช เช›เซ€เช เชฎเซ‚เชฒเซเชฏเซ‹_เชญเชฐเซ‹ เช•เชพเชฐเซเชฏเชฎเชพเช‚ pivot_wider() เช…เชจเซ‡ เช† เช–เซ‚เชŸเชคเชพ เชฎเซ‚เชฒเซเชฏเซ‹เชจเซ‡ เชถเซ‚เชจเซเชฏ เชตเชกเซ‡ เชญเชฐเซ‹:

fish_encounters %>% pivot_wider(
  names_from = station, 
  values_from = seen,
  values_fill = list(seen = 0)
)

#> # A tibble: 19 x 12
#>    fish  Release I80_1 Lisbon  Rstr Base_TD   BCE   BCW  BCE2  BCW2   MAE
#>    <fct>   <int> <int>  <int> <int>   <int> <int> <int> <int> <int> <int>
#>  1 4842        1     1      1     1       1     1     1     1     1     1
#>  2 4843        1     1      1     1       1     1     1     1     1     1
#>  3 4844        1     1      1     1       1     1     1     1     1     1
#>  4 4845        1     1      1     1       1     0     0     0     0     0
#>  5 4847        1     1      1     0       0     0     0     0     0     0
#>  6 4848        1     1      1     1       0     0     0     0     0     0
#>  7 4849        1     1      0     0       0     0     0     0     0     0
#>  8 4850        1     1      0     1       1     1     1     0     0     0
#>  9 4851        1     1      0     0       0     0     0     0     0     0
#> 10 4854        1     1      0     0       0     0     0     0     0     0
#> # โ€ฆ with 9 more rows, and 1 more variable: MAW <int>

เชฌเชนเซเชตเชฟเชง เชธเซเชคเซเชฐเซ‹เชค เชšเชฒเซ‹เชฎเชพเช‚เชฅเซ€ เช•เซ‰เชฒเชฎ เชจเชพเชฎ เชœเชจเชฐเซ‡เชŸ เช•เชฐเชตเซเช‚

เช•เชฒเซเชชเชจเชพ เช•เชฐเซ‹ เช•เซ‡ เช…เชฎเชพเชฐเซ€ เชชเชพเชธเซ‡ เช‰เชคเซเชชเชพเชฆเชจ, เชฆเซ‡เชถ เช…เชจเซ‡ เชตเชฐเซเชทเชจเซเช‚ เชธเช‚เชฏเซ‹เชœเชจ เชงเชฐเชพเชตเชคเซเช‚ เชŸเซ‡เชฌเชฒ เช›เซ‡. เชŸเซ‡เชธเซเชŸ เชคเชพเชฐเซ€เช– เชซเซเชฐเซ‡เชฎ เชœเชจเชฐเซ‡เชŸ เช•เชฐเชตเชพ เชฎเชพเชŸเซ‡, เชคเชฎเซ‡ เชจเซ€เชšเซ‡เชจเซ‹ เช•เซ‹เชก เชšเชฒเชพเชตเซ€ เชถเช•เซ‹ เช›เซ‹:

df <- expand_grid(
  product = c("A", "B"), 
  country = c("AI", "EI"), 
  year = 2000:2014
) %>%
  filter((product == "A" & country == "AI") | product == "B") %>% 
  mutate(value = rnorm(nrow(.)))

#> # A tibble: 45 x 4
#>    product country  year    value
#>    <chr>   <chr>   <int>    <dbl>
#>  1 A       AI       2000 -2.05   
#>  2 A       AI       2001 -0.676  
#>  3 A       AI       2002  1.60   
#>  4 A       AI       2003 -0.353  
#>  5 A       AI       2004 -0.00530
#>  6 A       AI       2005  0.442  
#>  7 A       AI       2006 -0.610  
#>  8 A       AI       2007 -2.77   
#>  9 A       AI       2008  0.899  
#> 10 A       AI       2009 -0.106  
#> # โ€ฆ with 35 more rows

เช…เชฎเชพเชฐเซเช‚ เช•เชพเชฐเซเชฏ เชกเซ‡เชŸเชพ เชซเซเชฐเซ‡เชฎเชจเซ‡ เชตเชฟเชธเซเชคเซƒเชค เช•เชฐเชตเชพเชจเซเช‚ เช›เซ‡ เชœเซ‡เชฅเซ€ เชเช• เช•เซ‰เชฒเชฎเชฎเชพเช‚ เช‰เชคเซเชชเชพเชฆเชจ เช…เชจเซ‡ เชฆเซ‡เชถเชจเชพ เชฆเชฐเซ‡เช• เชธเช‚เชฏเซ‹เชœเชจ เชฎเชพเชŸเซ‡เชจเซ‹ เชกเซ‡เชŸเชพ เชนเซ‹เชฏ. เช† เช•เชฐเชตเชพ เชฎเชพเชŸเซ‡, เชซเช•เซเชค เชฆเชฒเซ€เชฒเชฎเชพเช‚ เชชเชธเชพเชฐ เชฅเชพเช“ เชจเชพเชฎเซ‹_เชฎเชพเช‚เชฅเซ€ เชฎเชฐเซเชœ เช•เชฐเชตเชพ เชฎเชพเชŸเซ‡เชจเชพ เช•เซเชทเซ‡เชคเซเชฐเซ‹เชจเชพ เชจเชพเชฎเซ‹ เชงเชฐเชพเชตเชคเซ‹ เชตเซ‡เช•เซเชŸเชฐ.

df %>% pivot_wider(names_from = c(product, country),
                 values_from = "value")

#> # A tibble: 15 x 4
#>     year     A_AI    B_AI    B_EI
#>    <int>    <dbl>   <dbl>   <dbl>
#>  1  2000 -2.05     0.607   1.20  
#>  2  2001 -0.676    1.65   -0.114 
#>  3  2002  1.60    -0.0245  0.501 
#>  4  2003 -0.353    1.30   -0.459 
#>  5  2004 -0.00530  0.921  -0.0589
#>  6  2005  0.442   -1.55    0.594 
#>  7  2006 -0.610    0.380  -1.28  
#>  8  2007 -2.77     0.830   0.637 
#>  9  2008  0.899    0.0175 -1.30  
#> 10  2009 -0.106   -0.195   1.03  
#> # โ€ฆ with 5 more rows

เชคเชฎเซ‡ เชซเช‚เช•เซเชถเชจ เชฎเชพเชŸเซ‡ เชธเซเชชเชทเซเชŸเซ€เช•เชฐเชฃเซ‹ เชชเชฃ เชฒเชพเช—เซ เช•เชฐเซ€ เชถเช•เซ‹ เช›เซ‹ pivot_wider(). เชชเชฐเช‚เชคเซ เชœเซเชฏเชพเชฐเซ‡ เชธเชฌเชฎเชฟเชŸ เช•เชฐเชตเชพเชฎเชพเช‚ เช†เชตเซ‡ เช›เซ‡ pivot_wider() เชธเซเชชเชทเซเชŸเซ€เช•เชฐเชฃ เชตเชฟเชชเชฐเซ€เชค เชฐเซ‚เชชเชพเช‚เชคเชฐเชฃ เช•เชฐเซ‡ เช›เซ‡ pivot_longer(): เชฎเชพเช‚ เช‰เชฒเซเชฒเซ‡เช–เชฟเชค เช•เซ‰เชฒเชฎ เชจเชพเชฎ, เชฎเชพเช‚เชฅเซ€ เชฎเซ‚เชฒเซเชฏเซ‹เชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ€เชจเซ‡ .เชฎเซ‚เชฒเซเชฏ เช…เชจเซ‡ เช…เชจเซเชฏ เช•เซ‰เชฒเชฎ.

เช† เชกเซ‡เชŸเชพเชธเซ‡เชŸ เชฎเชพเชŸเซ‡, เชคเชฎเซ‡ เช•เชธเซเชŸเชฎ เชธเซเชชเชทเซเชŸเซ€เช•เชฐเชฃ เชœเชจเชฐเซ‡เชŸ เช•เชฐเซ€ เชถเช•เซ‹ เช›เซ‹ เชœเซ‹ เชคเชฎเซ‡ เชˆเชšเซเช›เซ‹ เช›เซ‹ เช•เซ‡ เชฆเชฐเซ‡เช• เชธเช‚เชญเชตเชฟเชค เชฆเซ‡เชถ เช…เชจเซ‡ เช‰เชคเซเชชเชพเชฆเชจ เชธเช‚เชฏเซ‹เชœเชจเชจเซ€ เชชเซ‹เชคเชพเชจเซ€ เช•เซ‰เชฒเชฎ เชนเซ‹เชฏ, เชฎเชพเชคเซเชฐ เชกเซ‡เชŸเชพเชฎเชพเช‚ เชนเชพเชœเชฐ เชนเซ‹เชฏ เชคเซ‡ เชœ เชจเชนเซ€เช‚:

spec <- df %>% 
  expand(product, country, .value = "value") %>% 
  unite(".name", product, country, remove = FALSE)

#> # A tibble: 4 x 4
#>   .name product country .value
#>   <chr> <chr>   <chr>   <chr> 
#> 1 A_AI  A       AI      value 
#> 2 A_EI  A       EI      value 
#> 3 B_AI  B       AI      value 
#> 4 B_EI  B       EI      value

df %>% pivot_wider(spec = spec) %>% head()

#> # A tibble: 6 x 5
#>    year     A_AI  A_EI    B_AI    B_EI
#>   <int>    <dbl> <dbl>   <dbl>   <dbl>
#> 1  2000 -2.05       NA  0.607   1.20  
#> 2  2001 -0.676      NA  1.65   -0.114 
#> 3  2002  1.60       NA -0.0245  0.501 
#> 4  2003 -0.353      NA  1.30   -0.459 
#> 5  2004 -0.00530    NA  0.921  -0.0589
#> 6  2005  0.442      NA -1.55    0.594

เชจเชตเชพ เชŸเชฟเชกเชฐ เช•เซ‹เชจเซเชธเซ‡เชชเซเชŸ เชธเชพเชฅเซ‡ เช•เชพเชฎ เช•เชฐเชตเชพเชจเชพ เช•เซ‡เชŸเชฒเชพเช• เช…เชฆเซเชฏเชคเชจ เช‰เชฆเชพเชนเชฐเชฃเซ‹

เช‰เชฆเชพเชนเชฐเชฃ เชคเชฐเซ€เช•เซ‡ เชฏเซเชเชธ เชธเซ‡เชจเซเชธเชธ เช‡เชจเซเช•เชฎ เช…เชจเซ‡ เชฐเซ‡เชจเซเชŸ เชกเซ‡เชŸเชพเชธเซ‡เชŸเชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ€เชจเซ‡ เชกเซ‡เชŸเชพ เชธเชพเชซ เช•เชฐเชตเซ‹.

เชกเซ‡เชŸเชพ เชธเซ‡เชŸ เช…เชฎเชจเซ‡_เชญเชพเชกเชพเชจเซ€_เช†เชตเช• 2017 เชฎเชพเชŸเซ‡ เชฏเซ.เชเชธ.เชฎเชพเช‚ เชฆเชฐเซ‡เช• เชฐเชพเชœเซเชฏ เชฎเชพเชŸเซ‡ เชธเชฐเซ‡เชฐเชพเชถ เช†เชตเช• เช…เชจเซ‡ เชญเชพเชกเชพเชจเซ€ เชฎเชพเชนเชฟเชคเซ€ เชงเชฐเชพเชตเซ‡ เช›เซ‡ (เชกเซ‡เชŸเชพ เชธเซ‡เชŸ เชชเซ‡เช•เซ‡เชœเชฎเชพเช‚ เช‰เชชเชฒเชฌเซเชง เช›เซ‡ เชตเซเชฏเชตเชธเซเชฅเชฟเชค เชตเชธเซเชคเซ€ เช—เชฃเชคเชฐเซ€).

us_rent_income
#> # A tibble: 104 x 5
#>    GEOID NAME       variable estimate   moe
#>    <chr> <chr>      <chr>       <dbl> <dbl>
#>  1 01    Alabama    income      24476   136
#>  2 01    Alabama    rent          747     3
#>  3 02    Alaska     income      32940   508
#>  4 02    Alaska     rent         1200    13
#>  5 04    Arizona    income      27517   148
#>  6 04    Arizona    rent          972     4
#>  7 05    Arkansas   income      23789   165
#>  8 05    Arkansas   rent          709     5
#>  9 06    California income      29454   109
#> 10 06    California rent         1358     3
#> # โ€ฆ with 94 more rows

เชœเซ‡ เชซเซ‹เชฐเซเชฎเชฎเชพเช‚ เชกเซ‡เชŸเชพ เชกเซ‡เชŸเชพเชธเซ‡เชŸเชฎเชพเช‚ เชธเช‚เช—เซเชฐเชนเชฟเชค เชฅเชพเชฏ เช›เซ‡ เช…เชฎเชจเซ‡_เชญเชพเชกเชพเชจเซ€_เช†เชตเช• เชคเซ‡เชฎเชจเซ€ เชธเชพเชฅเซ‡ เช•เชพเชฎ เช•เชฐเชตเซเช‚ เช…เชคเซเชฏเช‚เชค เช…เชธเซเชตเชฟเชงเชพเชœเชจเช• เช›เซ‡, เชคเซ‡เชฅเซ€ เช…เชฎเซ‡ เช•เซ‰เชฒเชฎ เชธเชพเชฅเซ‡ เชกเซ‡เชŸเชพ เชธเซ‡เชŸ เชฌเชจเชพเชตเชตเชพ เชฎเชพเช‚เช—เซ€เช เช›เซ€เช: เชญเชพเชกเซเช‚, เชญเชพเชกเซเช‚_เชฎเซ‹, เช†เชตเซ‡, เช†เชตเช•_เชฎเซ‹. เช† เชธเซเชชเชทเซเชŸเซ€เช•เชฐเชฃ เชฌเชจเชพเชตเชตเชพเชจเซ€ เช˜เชฃเซ€ เชฐเซ€เชคเซ‹ เช›เซ‡, เชชเชฐเช‚เชคเซ เชฎเซเช–เซเชฏ เชฎเซเชฆเซเชฆเซ‹ เช เช›เซ‡ เช•เซ‡ เช†เชชเชฃเซ‡ เชšเชฒ เชฎเซ‚เชฒเซเชฏเซ‹เชจเชพ เชฆเชฐเซ‡เช• เชธเช‚เชฏเซ‹เชœเชจเชจเซ‡ เชœเชจเชฐเซ‡เชŸ เช•เชฐเชตเชพเชจเซ€ เชœเชฐเซ‚เชฐ เช›เซ‡ เช…เชจเซ‡ เช…เช‚เชฆเชพเชœ/เชฎเซ‹เช…เชจเซ‡ เชชเช›เซ€ เช•เซ‰เชฒเชฎเชจเซเช‚ เชจเชพเชฎ เชœเชจเชฐเซ‡เชŸ เช•เชฐเซ‹.

  spec <- us_rent_income %>% 
    expand(variable, .value = c("estimate", "moe")) %>% 
    mutate(
      .name = paste0(variable, ifelse(.value == "moe", "_moe", ""))
    )

#> # A tibble: 4 x 3
#>   variable .value   .name     
#>   <chr>    <chr>    <chr>     
#> 1 income   estimate income    
#> 2 income   moe      income_moe
#> 3 rent     estimate rent      
#> 4 rent     moe      rent_moe

เช† เชธเซเชชเชทเซเชŸเซ€เช•เชฐเชฃ เชชเซ‚เชฐเซเช‚ เชชเชพเชกเซ‡ เช›เซ‡ pivot_wider() เช…เชฎเซ‡ เชœเซ‡ เชชเชฐเชฟเชฃเชพเชฎ เชถเซ‹เชงเซ€ เชฐเชนเซเชฏเชพ เช›เซ€เช เชคเซ‡ เช…เชฎเชจเซ‡ เช†เชชเซ‡ เช›เซ‡:

us_rent_income %>% pivot_wider(spec = spec)

#> # A tibble: 52 x 6
#>    GEOID NAME                 income income_moe  rent rent_moe
#>    <chr> <chr>                 <dbl>      <dbl> <dbl>    <dbl>
#>  1 01    Alabama               24476        136   747        3
#>  2 02    Alaska                32940        508  1200       13
#>  3 04    Arizona               27517        148   972        4
#>  4 05    Arkansas              23789        165   709        5
#>  5 06    California            29454        109  1358        3
#>  6 08    Colorado              32401        109  1125        5
#>  7 09    Connecticut           35326        195  1123        5
#>  8 10    Delaware              31560        247  1076       10
#>  9 11    District of Columbia  43198        681  1424       17
#> 10 12    Florida               25952         70  1077        3
#> # โ€ฆ with 42 more rows

เชตเชฟเชถเซเชต เชฌเซ‡เช‚เช•

เช•เซ‡เชŸเชฒเซ€เช•เชตเชพเชฐ เชกเซ‡เชŸเชพ เชธเซ‡เชŸเชจเซ‡ เช‡เชšเซเช›เชฟเชค เชธเซเชตเชฐเซ‚เชชเชฎเชพเช‚ เชฒเชพเชตเชตเชพ เชฎเชพเชŸเซ‡ เช˜เชฃเชพ เชชเช—เชฒเชพเช‚เชจเซ€ เชœเชฐเซ‚เชฐ เชชเชกเซ‡ เช›เซ‡.
เชกเซ‡เชŸเชพเชธเซ‡เชŸ เชตเชฐเซเชฒเซเชก_เชฌเซ‡เช‚เช•_เชชเซ‹เชช 2000 เช…เชจเซ‡ 2018 เชจเซ€ เชตเชšเซเชšเซ‡ เชฆเชฐเซ‡เช• เชฆเซ‡เชถเชจเซ€ เชตเชธเซเชคเซ€ เชชเชฐ เชตเชฟเชถเซเชต เชฌเซ‡เช‚เช• เชกเซ‡เชŸเชพ เชงเชฐเชพเชตเซ‡ เช›เซ‡.

#> # A tibble: 1,056 x 20
#>    country indicator `2000` `2001` `2002` `2003`  `2004`  `2005`   `2006`
#>    <chr>   <chr>      <dbl>  <dbl>  <dbl>  <dbl>   <dbl>   <dbl>    <dbl>
#>  1 ABW     SP.URB.Tโ€ฆ 4.24e4 4.30e4 4.37e4 4.42e4 4.47e+4 4.49e+4  4.49e+4
#>  2 ABW     SP.URB.Gโ€ฆ 1.18e0 1.41e0 1.43e0 1.31e0 9.51e-1 4.91e-1 -1.78e-2
#>  3 ABW     SP.POP.Tโ€ฆ 9.09e4 9.29e4 9.50e4 9.70e4 9.87e+4 1.00e+5  1.01e+5
#>  4 ABW     SP.POP.Gโ€ฆ 2.06e0 2.23e0 2.23e0 2.11e0 1.76e+0 1.30e+0  7.98e-1
#>  5 AFG     SP.URB.Tโ€ฆ 4.44e6 4.65e6 4.89e6 5.16e6 5.43e+6 5.69e+6  5.93e+6
#>  6 AFG     SP.URB.Gโ€ฆ 3.91e0 4.66e0 5.13e0 5.23e0 5.12e+0 4.77e+0  4.12e+0
#>  7 AFG     SP.POP.Tโ€ฆ 2.01e7 2.10e7 2.20e7 2.31e7 2.41e+7 2.51e+7  2.59e+7
#>  8 AFG     SP.POP.Gโ€ฆ 3.49e0 4.25e0 4.72e0 4.82e0 4.47e+0 3.87e+0  3.23e+0
#>  9 AGO     SP.URB.Tโ€ฆ 8.23e6 8.71e6 9.22e6 9.77e6 1.03e+7 1.09e+7  1.15e+7
#> 10 AGO     SP.URB.Gโ€ฆ 5.44e0 5.59e0 5.70e0 5.76e0 5.75e+0 5.69e+0  4.92e+0
#> # โ€ฆ with 1,046 more rows, and 11 more variables: `2007` <dbl>,
#> #   `2008` <dbl>, `2009` <dbl>, `2010` <dbl>, `2011` <dbl>, `2012` <dbl>,
#> #   `2013` <dbl>, `2014` <dbl>, `2015` <dbl>, `2016` <dbl>, `2017` <dbl>

เช…เชฎเชพเชฐเซ‹ เชงเซเชฏเซ‡เชฏ เชฆเชฐเซ‡เช• เชšเชฒ เชธเชพเชฅเซ‡ เชคเซ‡เชจเซ€ เชชเซ‹เชคเชพเชจเซ€ เช•เซ‹เชฒเชฎเชฎเชพเช‚ เชธเซเช˜เชก เชกเซ‡เชŸเชพ เชธเซ‡เชŸ เชฌเชจเชพเชตเชตเชพเชจเซ‹ เช›เซ‡. เชคเซ‡ เชธเซเชชเชทเซเชŸ เชจเชฅเซ€ เช•เซ‡ เช•เชฏเชพ เชชเช—เชฒเชพเช‚เชจเซ€ เชœเชฐเซ‚เชฐ เช›เซ‡, เชชเชฐเช‚เชคเซ เช…เชฎเซ‡ เชธเซŒเชฅเซ€ เชธเซเชชเชทเซเชŸ เชธเชฎเชธเซเชฏเชพเชฅเซ€ เชถเชฐเซ‚เช†เชค เช•เชฐเซ€เชถเซเช‚: เชตเชฐเซเชท เชฌเชนเซเชตเชฟเชง เช•เซ‰เชฒเชฎเชฎเชพเช‚ เชซเซ‡เชฒเชพเชฏเซ‡เชฒเซเช‚ เช›เซ‡.

เช†เชจเซ‡ เช เซ€เช• เช•เชฐเชตเชพ เชฎเชพเชŸเซ‡ เชคเชฎเชพเชฐเซ‡ เชซเช‚เช•เซเชถเชจเชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเชตเชพเชจเซ€ เชœเชฐเซ‚เชฐ เช›เซ‡ pivot_longer().

pop2 <- world_bank_pop %>% 
  pivot_longer(`2000`:`2017`, names_to = "year")

#> # A tibble: 19,008 x 4
#>    country indicator   year  value
#>    <chr>   <chr>       <chr> <dbl>
#>  1 ABW     SP.URB.TOTL 2000  42444
#>  2 ABW     SP.URB.TOTL 2001  43048
#>  3 ABW     SP.URB.TOTL 2002  43670
#>  4 ABW     SP.URB.TOTL 2003  44246
#>  5 ABW     SP.URB.TOTL 2004  44669
#>  6 ABW     SP.URB.TOTL 2005  44889
#>  7 ABW     SP.URB.TOTL 2006  44881
#>  8 ABW     SP.URB.TOTL 2007  44686
#>  9 ABW     SP.URB.TOTL 2008  44375
#> 10 ABW     SP.URB.TOTL 2009  44052
#> # โ€ฆ with 18,998 more rows

เช†เช—เชณเชจเซเช‚ เชชเช—เชฒเซเช‚ เช เชธเซ‚เชšเช• เชšเชฒ เชœเซ‹เชตเชพเชจเซเช‚ เช›เซ‡.
pop2 %>% count(indicator)

#> # A tibble: 4 x 2
#>   indicator       n
#>   <chr>       <int>
#> 1 SP.POP.GROW  4752
#> 2 SP.POP.TOTL  4752
#> 3 SP.URB.GROW  4752
#> 4 SP.URB.TOTL  4752

เชœเซเชฏเชพเช‚ SP.POP.GROW เช เชตเชธเซเชคเซ€ เชตเซƒเชฆเซเชงเชฟ เช›เซ‡, SP.POP.TOTL เช เช•เซเชฒ เชตเชธเซเชคเซ€ เช›เซ‡, เช…เชจเซ‡ SP.URB. * เช เชœ เชตเชธเซเชคเซ, เชชเชฐเช‚เชคเซ เชฎเชพเชคเซเชฐ เชถเชนเซ‡เชฐเซ€ เชตเชฟเชธเซเชคเชพเชฐเซ‹ เชฎเชพเชŸเซ‡. เชšเชพเชฒเซ‹ เช† เชฎเซ‚เชฒเซเชฏเซ‹เชจเซ‡ เชฌเซ‡ เชšเชฒเซ‹เชฎเชพเช‚ เชตเชฟเชญเชพเชœเซ€เชค เช•เชฐเซ€เช: เชตเชฟเชธเซเชคเชพเชฐ - เชตเชฟเชธเซเชคเชพเชฐ (เช•เซเชฒ เช…เชฅเชตเชพ เชถเชนเซ‡เชฐเซ€) เช…เชจเซ‡ เชตเชพเชธเซเชคเชตเชฟเช• เชกเซ‡เชŸเชพ (เชตเชธเซเชคเซ€ เช…เชฅเชตเชพ เชตเซƒเชฆเซเชงเชฟ) เชงเชฐเชพเชตเชคเซเช‚ เชšเชฒ:

pop3 <- pop2 %>% 
  separate(indicator, c(NA, "area", "variable"))

#> # A tibble: 19,008 x 5
#>    country area  variable year  value
#>    <chr>   <chr> <chr>    <chr> <dbl>
#>  1 ABW     URB   TOTL     2000  42444
#>  2 ABW     URB   TOTL     2001  43048
#>  3 ABW     URB   TOTL     2002  43670
#>  4 ABW     URB   TOTL     2003  44246
#>  5 ABW     URB   TOTL     2004  44669
#>  6 ABW     URB   TOTL     2005  44889
#>  7 ABW     URB   TOTL     2006  44881
#>  8 ABW     URB   TOTL     2007  44686
#>  9 ABW     URB   TOTL     2008  44375
#> 10 ABW     URB   TOTL     2009  44052
#> # โ€ฆ with 18,998 more rows

เชนเชตเซ‡ เช†เชชเชฃเซ‡ เชตเซ‡เชฐเซ€เชเชฌเชฒเชจเซ‡ เชฌเซ‡ เช•เซ‹เชฒเชฎเชฎเชพเช‚ เชตเชฟเชญเชพเชœเซ€เชค เช•เชฐเชตเชพเชจเซเช‚ เช›เซ‡:

pop3 %>% 
  pivot_wider(names_from = variable, values_from = value)

#> # A tibble: 9,504 x 5
#>    country area  year   TOTL    GROW
#>    <chr>   <chr> <chr> <dbl>   <dbl>
#>  1 ABW     URB   2000  42444  1.18  
#>  2 ABW     URB   2001  43048  1.41  
#>  3 ABW     URB   2002  43670  1.43  
#>  4 ABW     URB   2003  44246  1.31  
#>  5 ABW     URB   2004  44669  0.951 
#>  6 ABW     URB   2005  44889  0.491 
#>  7 ABW     URB   2006  44881 -0.0178
#>  8 ABW     URB   2007  44686 -0.435 
#>  9 ABW     URB   2008  44375 -0.698 
#> 10 ABW     URB   2009  44052 -0.731 
#> # โ€ฆ with 9,494 more rows

เชธเช‚เชชเชฐเซเช•เซ‹เชจเซ€ เชธเซ‚เชšเชฟ

เชเช• เช›เซ‡เชฒเซเชฒเซเช‚ เช‰เชฆเชพเชนเชฐเชฃ, เช•เชฒเซเชชเชจเชพ เช•เชฐเซ‹ เช•เซ‡ เชคเชฎเชพเชฐเซ€ เชชเชพเชธเซ‡ เชเช• เชธเช‚เชชเชฐเซเช• เชธเซ‚เชšเชฟ เช›เซ‡ เชœเซ‡ เชคเชฎเซ‡ เชตเซ‡เชฌเชธเชพเช‡เชŸ เชชเชฐเชฅเซ€ เช•เซ‰เชชเชฟ เช…เชจเซ‡ เชชเซ‡เชธเซเชŸ เช•เชฐเซ€ เช›เซ‡:

contacts <- tribble(
  ~field, ~value,
  "name", "Jiena McLellan",
  "company", "Toyota", 
  "name", "John Smith", 
  "company", "google", 
  "email", "[email protected]",
  "name", "Huxley Ratcliffe"
)

เช† เชธเซ‚เชšเชฟเชจเซ‡ เชŸเซ‡เชฌเซเชฏเซเชฒเซ‡เชŸ เช•เชฐเชตเซเช‚ เช–เซ‚เชฌ เชฎเซเชถเซเช•เซ‡เชฒ เช›เซ‡ เช•เชพเชฐเชฃ เช•เซ‡ เชคเซเชฏเชพเช‚ เช•เซ‹เชˆ เชšเชฒ เชจเชฅเซ€ เชœเซ‡ เช“เชณเช–เซ€ เชถเช•เซ‡ เช•เซ‡ เช•เชฏเซ‹ เชกเซ‡เชŸเชพ เช•เชฏเชพ เชธเช‚เชชเชฐเซเช•เชจเซ‹ เช›เซ‡. เช…เชฎเซ‡ เชฆเชฐเซ‡เช• เชจเชตเชพ เชธเช‚เชชเชฐเซเช• เชฎเชพเชŸเซ‡เชจเซ‹ เชกเซ‡เชŸเชพ เชจเชพเชฎ ("เชจเชพเชฎ") เชฅเซ€ เชถเชฐเซ‚ เชฅเชพเชฏ เช›เซ‡ เชคเซ‡ เชจเซ‹เช‚เชงเซ€เชจเซ‡ เชคเซ‡เชจเซ‡ เช เซ€เช• เช•เชฐเซ€ เชถเช•เซ€เช เช›เซ€เช, เชคเซ‡เชฅเซ€ เช…เชฎเซ‡ เชเช• เช…เชจเชจเซเชฏ เช“เชณเช–เช•เชฐเซเชคเชพ เชฌเชจเชพเชตเซ€ เชถเช•เซ€เช เช›เซ€เช เช…เชจเซ‡ เชœเซเชฏเชพเชฐเซ‡ เชซเซ€เชฒเซเชก เช•เซ‰เชฒเชฎเชฎเชพเช‚ "เชจเชพเชฎ" เชฎเซ‚เชฒเซเชฏเชจเซ‹ เชธเชพเชฎเชจเซ‹ เช•เชฐเชตเซ‹ เชชเชกเซ‡ เชคเซเชฏเชพเชฐเซ‡ เชคเซ‡เชจเซ‡ เชเช•เชฅเซ€ เชตเชงเชพเชฐเซ€ เชถเช•เซ€เช เช›เซ€เช:

contacts <- contacts %>% 
  mutate(
    person_id = cumsum(field == "name")
  )
contacts

#> # A tibble: 6 x 3
#>   field   value            person_id
#>   <chr>   <chr>                <int>
#> 1 name    Jiena McLellan           1
#> 2 company Toyota                   1
#> 3 name    John Smith               2
#> 4 company google                   2
#> 5 email   [email protected]          2
#> 6 name    Huxley Ratcliffe         3

เชนเชตเซ‡ เช…เชฎเชพเชฐเซ€ เชชเชพเชธเซ‡ เชฆเชฐเซ‡เช• เชธเช‚เชชเชฐเซเช• เชฎเชพเชŸเซ‡ เช…เชจเชจเซเชฏ ID เช›เซ‡, เช…เชฎเซ‡ เชซเซ€เชฒเซเชก เช…เชจเซ‡ เชฎเซ‚เชฒเซเชฏเชจเซ‡ เช•เซ‰เชฒเชฎเชฎเชพเช‚ เชซเซ‡เชฐเชตเซ€ เชถเช•เซ€เช เช›เซ€เช:

contacts %>% 
  pivot_wider(names_from = field, values_from = value)

#> # A tibble: 3 x 4
#>   person_id name             company email          
#>       <int> <chr>            <chr>   <chr>          
#> 1         1 Jiena McLellan   Toyota  <NA>           
#> 2         2 John Smith       google  [email protected]
#> 3         3 Huxley Ratcliffe <NA>    <NA>

เชจเชฟเชทเซเช•เชฐเซเชท

เชฎเชพเชฐเซ‹ เช…เช‚เช—เชค เช…เชญเชฟเชชเซเชฐเชพเชฏ เช›เซ‡ เช•เซ‡ เชจเชตเซ‹ เช•เซ‹เชจเซเชธเซ‡เชชเซเชŸ เชตเซเชฏเชตเชธเซเชฅเชฟเชค เช–เชฐเซ‡เช–เชฐ เชตเชงเซ เชธเชพเชนเชœเชฟเช•, เช…เชจเซ‡ เชฒเซ‡เช—เชธเซ€ เช•เชพเชฐเซเชฏเซ‹เชจเซ€ เช•เชพเชฐเซเชฏเช•เซเชทเชฎเชคเชพเชฎเชพเช‚ เชจเซ‹เช‚เชงเชชเชพเชคเซเชฐ เชฐเซ€เชคเซ‡ เชถเซเชฐเซ‡เชทเซเช  spread() ะธ gather(). เชฎเชจเซ‡ เช†เชถเชพ เช›เซ‡ เช•เซ‡ เช† เชฒเซ‡เช– เชคเชฎเชจเซ‡ เชคเซ‡เชจเซ€ เชธเชพเชฅเซ‡ เชตเซเชฏเชตเชนเชพเชฐ เช•เชฐเชตเชพเชฎเชพเช‚ เชฎเชฆเชฆ เช•เชฐเชถเซ‡ pivot_longer() ะธ pivot_wider().

เชธเซ‹เชฐเซเชธ: www.habr.com

เชเช• เชŸเชฟเชชเซเชชเชฃเซ€ เช‰เชฎเซ‡เชฐเซ‹