рдЖрд░ рдкреИрдХреЗрдЬ рдЯрд┐рдбрд░ рдФрд░ рдЗрд╕рдХреЗ рдирдП рдлрд╝рдВрдХреНрд╢рди рдкрд┐рд╡реЛрдЯ_рд▓реЙрдиреНрдЧрд░ рдФрд░ рдкрд┐рд╡реЛрдЯ_рд╡рд╛рдЗрдбрд░

рдкреИрдХреЗрдЬ рд╕рд╛рдл-рд╕реБрдерд░рд╛ рдЖрд░ рднрд╛рд╖рд╛ рдореЗрдВ рд╕рдмрд╕реЗ рд▓реЛрдХрдкреНрд░рд┐рдп рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдХреЗ рдореВрд▓ рдореЗрдВ рд╢рд╛рдорд┐рд▓ - рд╕рд╛рдл рд╕реБрдерд░рд╛.
рдкреИрдХреЗрдЬ рдХрд╛ рдореБрдЦреНрдп рдЙрджреНрджреЗрд╢реНрдп рдбреЗрдЯрд╛ рдХреЛ рд╕рдЯреАрдХ рд░реВрдк рдореЗрдВ рд▓рд╛рдирд╛ рд╣реИред

рд╣реИрдмреЗ рдкрд░ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЙрдкрд▓рдмреНрдз рд╣реИ рдкреНрд░рдХрд╛рд╢рди рдЗрд╕ рдкреИрдХреЗрдЬ рдХреЛ рд╕рдорд░реНрдкрд┐рдд рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ 2015 рдХрд╛ рд╣реИред рдФрд░ рдореИрдВ рдЖрдкрдХреЛ рд╕рдмрд╕реЗ рддрд╛рдЬрд╝рд╛ рдмрджрд▓рд╛рд╡реЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрддрд╛рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ, рдЬрд┐рдирдХреА рдШреЛрд╖рдгрд╛ рдХреБрдЫ рджрд┐рди рдкрд╣рд▓реЗ рдЗрд╕рдХреЗ рд▓реЗрдЦрдХ рд╣реЗрдбрд▓реА рд╡рд┐рдХрдо рдиреЗ рдХреА рдереАред

рдЖрд░ рдкреИрдХреЗрдЬ рдЯрд┐рдбрд░ рдФрд░ рдЗрд╕рдХреЗ рдирдП рдлрд╝рдВрдХреНрд╢рди рдкрд┐рд╡реЛрдЯ_рд▓реЙрдиреНрдЧрд░ рдФрд░ рдкрд┐рд╡реЛрдЯ_рд╡рд╛рдЗрдбрд░

SJK: рдХреНрдпрд╛ рдЗрдХрдЯреНрдард╛ () рдФрд░ рд╕реНрдкреНрд░реЗрдб () рдХреЛ рдмрд╣рд┐рд╖реНрдХреГрдд рдХрд░ рджрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛?

рд╣реИрдбрд▓реА рд╡рд┐рдХрдо: рдХреБрдЫ рд╣рдж рддрдХред рд╣рдо рдЕрдм рдЗрди рдлрд╝рдВрдХреНрд╢рдВрд╕ рдХреЗ рдЙрдкрдпреЛрдЧ рдХреА рдЕрдиреБрд╢рдВрд╕рд╛ рдирд╣реАрдВ рдХрд░реЗрдВрдЧреЗ рдФрд░ рдЙрдирдореЗрдВ рдмрдЧ рдХреЛ рдареАрдХ рдирд╣реАрдВ рдХрд░реЗрдВрдЧреЗ, рд▓реЗрдХрд┐рди рд╡реЗ рдЕрдкрдиреА рд╡рд░реНрддрдорд╛рди рд╕реНрдерд┐рддрд┐ рдореЗрдВ рдкреИрдХреЗрдЬ рдореЗрдВ рдореМрдЬреВрдж рд░рд╣реЗрдВрдЧреЗред

рд╕рд╛рдордЧреНрд░реА

рдпрджрд┐ рдЖрдк рдбреЗрдЯрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдореЗрдВ рд░реБрдЪрд┐ рд░рдЦрддреЗ рд╣реИрдВ, рддреЛ рдЖрдкрдХреЛ рдореЗрд░реА рд░реБрдЪрд┐ рднреА рд╣реЛ рд╕рдХрддреА рд╣реИ рддрд╛рд░ ╨╕ рдпреВрдЯреНрдпреВрдм рдЪреИрдирд▓. рдЕрдзрд┐рдХрд╛рдВрд╢ рд╕рд╛рдордЧреНрд░реА рдЖрд░ рднрд╛рд╖рд╛ рдХреЛ рд╕рдорд░реНрдкрд┐рдд рд╣реИред

рд╕реБрд╡реНрдпрд╡рд╕реНрдерд┐рдд рдбреЗрдЯрд╛ рдЕрд╡рдзрд╛рд░рдгрд╛

рд▓рдХреНрд╖реНрдп рд╕рд╛рдл-рд╕реБрдерд░рд╛ - рдбреЗрдЯрд╛ рдХреЛ рддрдерд╛рдХрдерд┐рдд рд╕рд╛рдлрд╝-рд╕реБрдерд░реЗ рд░реВрдк рдореЗрдВ рд▓рд╛рдиреЗ рдореЗрдВ рдЖрдкрдХреА рд╕рд╣рд╛рдпрддрд╛ рдХрд░реЗрдВред рдиреАрдЯ рдбреЗрдЯрд╛ рд╡рд╣ рдбреЗрдЯрд╛ рд╣реИ рдЬрд╣рд╛рдВ:

  • рдкреНрд░рддреНрдпреЗрдХ рд╡реЗрд░рд┐рдПрдмрд▓ рдПрдХ рдХреЙрд▓рдо рдореЗрдВ рд╣реИ.
  • рдкреНрд░рддреНрдпреЗрдХ рдЕрд╡рд▓реЛрдХрди рдПрдХ рд╕реНрдЯреНрд░рд┐рдВрдЧ рд╣реИ.
  • рдкреНрд░рддреНрдпреЗрдХ рдорд╛рди рдПрдХ рд╕реЗрд▓ рд╣реИ.

рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд░рддреЗ рд╕рдордп рд╕реБрд╡реНрдпрд╡рд╕реНрдерд┐рдд рдбреЗрдЯрд╛ рдореЗрдВ рдкреНрд░рд╕реНрддреБрдд рдХрд┐рдП рдЧрдП рдбреЗрдЯрд╛ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдирд╛ рдмрд╣реБрдд рдЖрд╕рд╛рди рдФрд░ рдЕрдзрд┐рдХ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реИред

рдореБрдЦреНрдп рдХрд╛рд░реНрдп tidyr рдкреИрдХреЗрдЬ рдореЗрдВ рд╢рд╛рдорд┐рд▓ рд╣реИрдВ

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(), рдореВрд▓ рддрд╛рд▓рд┐рдХрд╛ рдореЗрдВ рд╕реНрдЯреЙрдХреНрд╕ рддрд░реНрдХреЛрдВ рдореЗрдВ рдХреЛрдИ рдХреЙрд▓рдо рд╕реВрдЪреАрдмрджреНрдз рдирд╣реАрдВ рд╣реИ рдирд╛рдо_рд╕реЗ ╨╕ values_to рдЙрдирдХреЗ рдирд╛рдо рдЙрджреНрдзрд░рдг рдЪрд┐рд╣реНрдиреЛрдВ рдореЗрдВ рд╣реЛрдиреЗ рдЪрд╛рд╣рд┐рдП.

рдПрдХ рддрд╛рд▓рд┐рдХрд╛ рдЬреЛ рдЖрдкрдХреЛ рдЖрд╕рд╛рдиреА рд╕реЗ рдпрд╣ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдореЗрдВ рдорджрдж рдХрд░реЗрдЧреА рдХрд┐ рдХрд┐рд╕реА рдирдИ рдЕрд╡рдзрд╛рд░рдгрд╛ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреИрд╕реЗ рд╕реНрд╡рд┐рдЪ рдХрд┐рдпрд╛ рдЬрд╛рдП рд╕рд╛рдл-рд╕реБрдерд░рд╛.

рдЖрд░ рдкреИрдХреЗрдЬ рдЯрд┐рдбрд░ рдФрд░ рдЗрд╕рдХреЗ рдирдП рдлрд╝рдВрдХреНрд╢рди рдкрд┐рд╡реЛрдЯ_рд▓реЙрдиреНрдЧрд░ рдФрд░ рдкрд┐рд╡реЛрдЯ_рд╡рд╛рдЗрдбрд░

рд▓реЗрдЦрдХ рд╕реЗ рдиреЛрдЯ

рдиреАрдЪреЗ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╕рд╛рд░рд╛ рдкрд╛рда рдЕрдиреБрдХреВрд▓реА рд╣реИ, рдореИрдВ рдЗрд╕реЗ рдирд┐рдГрд╢реБрд▓реНрдХ рдЕрдиреБрд╡рд╛рдж рднреА рдХрд╣реВрдБрдЧрд╛ рд╢рдмреНрджрдЪрд┐рддреНрд░ рдЖрдзрд┐рдХрд╛рд░рд┐рдХ рдЯрд┐рдбреАрд╡рд░реНрд╕ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рд╡реЗрдмрд╕рд╛рдЗрдЯ рд╕реЗред

рдбреЗрдЯрд╛ рдХреЛ рд╡рд┐рд╕реНрддреГрдд рд╕реЗ рджреАрд░реНрдШ рдкреНрд░рд╛рд░реВрдк рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд░рдиреЗ рдХрд╛ рдПрдХ рд╕рд░рд▓ рдЙрджрд╛рд╣рд░рдг

pivot_longer () - рдХреЙрд▓рдо рдХреА рд╕рдВрдЦреНрдпрд╛ рдХрдо рдХрд░рдХреЗ рдФрд░ рдкрдВрдХреНрддрд┐рдпреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдмрдврд╝рд╛рдХрд░ рдбреЗрдЯрд╛ рд╕реЗрдЯ рдХреЛ рд▓рдВрдмрд╛ рдмрдирд╛рддрд╛ рд╣реИред

рдЖрд░ рдкреИрдХреЗрдЬ рдЯрд┐рдбрд░ рдФрд░ рдЗрд╕рдХреЗ рдирдП рдлрд╝рдВрдХреНрд╢рди рдкрд┐рд╡реЛрдЯ_рд▓реЙрдиреНрдЧрд░ рдФрд░ рдкрд┐рд╡реЛрдЯ_рд╡рд╛рдЗрдбрд░

рд▓реЗрдЦ рдореЗрдВ рдкреНрд░рд╕реНрддреБрдд рдЙрджрд╛рд╣рд░рдгреЛрдВ рдХреЛ рдЪрд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ рдЖрд╡рд╢реНрдпрдХ рдкреИрдХреЗрдЬ рдХрдиреЗрдХреНрдЯ рдХрд░рдиреЗ рд╣реЛрдВрдЧреЗ:

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()

  • рдкрд╣рд▓рд╛ рддрд░реНрдХ рдХрд░реНрдирд▓, рд╡рд░реНрдгрди рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдХрд┐рди рд╕реНрддрдВрднреЛрдВ рдХреЛ рдорд░реНрдЬ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рд╕рднреА рдХреЙрд▓рдо рдХреЛ рдЫреЛрдбрд╝рдХрд░ рдкрд╣рд░.
  • рддрд░реНрдХ рдирд╛рдо_рд╕реЗ рдЙрд╕ рд╡реЗрд░рд┐рдПрдмрд▓ рдХрд╛ рдирд╛рдо рджреЗрддрд╛ рд╣реИ рдЬреЛ рд╣рдорд╛рд░реЗ рджреНрд╡рд╛рд░рд╛ рд╕рдВрдпреЛрдЬрд┐рдд рдХреЙрд▓рдореЛрдВ рдХреЗ рдирд╛рдореЛрдВ рд╕реЗ рдмрдирд╛рдпрд╛ рдЬрд╛рдПрдЧрд╛ред
  • values_to рдПрдХ рд╡реЗрд░рд┐рдПрдмрд▓ рдХрд╛ рдирд╛рдо рджреЗрддрд╛ рд╣реИ рдЬреЛ рдорд░реНрдЬ рдХрд┐рдП рдЧрдП рдХреЙрд▓рдо рдХреА рдХреЛрд╢рд┐рдХрд╛рдУрдВ рдХреЗ рдорд╛рдиреЛрдВ рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рдбреЗрдЯрд╛ рд╕реЗ рдмрдирд╛рдпрд╛ рдЬрд╛рдПрдЧрд╛ред

рдирд┐рд░реНрджрд┐рд╖реНрдЯреАрдХрд░рдг

рдпрд╣ рдкреИрдХреЗрдЬ рдХреА рдПрдХ рдирдИ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рд╣реИ рд╕рд╛рдл-рд╕реБрдерд░рд╛, рдЬреЛ рдкрд╣рд▓реЗ рд╡рд┐рд░рд╛рд╕рдд рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддреЗ рд╕рдордп рдЕрдиреБрдкрд▓рдмреНрдз рдерд╛ред

рдПрдХ рд╡рд┐рдирд┐рд░реНрджреЗрд╢рди рдПрдХ рдбреЗрдЯрд╛ рдлрд╝реНрд░реЗрдо рд╣реИ, рдЬрд┐рд╕рдХреА рдкреНрд░рддреНрдпреЗрдХ рдкрдВрдХреНрддрд┐ рдирдП рдЖрдЙрдЯрдкреБрдЯ рджрд┐рдирд╛рдВрдХ рдлрд╝реНрд░реЗрдо рдореЗрдВ рдПрдХ рдХреЙрд▓рдо рд╕реЗ рдореЗрд▓ рдЦрд╛рддреА рд╣реИ, рдФрд░ рджреЛ рд╡рд┐рд╢реЗрд╖ рдХреЙрд▓рдо рдЬреЛ рдЗрд╕рд╕реЗ рд╢реБрд░реВ рд╣реЛрддреЗ рд╣реИрдВ:

  • . рдирд╛рдо рдореВрд▓ рд╕реНрддрдВрдн рдирд╛рдо рд╢рд╛рдорд┐рд▓ рд╣реИ.
  • редрдХреАрдордд рдЗрд╕рдореЗрдВ рдЙрд╕ рдХреЙрд▓рдо рдХрд╛ рдирд╛рдо рд╢рд╛рдорд┐рд▓ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рд╕реЗрд▓ рдорд╛рди рд╣реЛрдВрдЧреЗред

рд╡рд┐рдирд┐рд░реНрджреЗрд╢ рдХреЗ рд╢реЗрд╖ рдХреЙрд▓рдо рджрд░реНрд╢рд╛рддреЗ рд╣реИрдВ рдХрд┐ рдирдпрд╛ рдХреЙрд▓рдо рд╕рдВрдкреАрдбрд╝рд┐рдд рдХреЙрд▓рдореЛрдВ рдХрд╛ рдирд╛рдо рдХреИрд╕реЗ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░реЗрдЧрд╛ . рдирд╛рдо.

рд╡рд┐рдирд┐рд░реНрджреЗрд╢ рдПрдХ рдХреЙрд▓рдо рдирд╛рдо рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рдореЗрдЯрд╛рдбреЗрдЯрд╛ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рддрд╛ рд╣реИ, рдкреНрд░рддреНрдпреЗрдХ рдХреЙрд▓рдо рдХреЗ рд▓рд┐рдП рдПрдХ рдкрдВрдХреНрддрд┐ рдФрд░ рдкреНрд░рддреНрдпреЗрдХ рдЪрд░ рдХреЗ рд▓рд┐рдП рдПрдХ рдХреЙрд▓рдо, рдХреЙрд▓рдо рдирд╛рдо рдХреЗ рд╕рд╛рде рд╕рдВрдпреБрдХреНрдд, рдпрд╣ рдкрд░рд┐рднрд╛рд╖рд╛ рдлрд┐рд▓рд╣рд╛рд▓ рднреНрд░рдорд┐рдд рдХрд░рдиреЗ рд╡рд╛рд▓реА рд▓рдЧ рд╕рдХрддреА рд╣реИ, рд▓реЗрдХрд┐рди рдХреБрдЫ рдЙрджрд╛рд╣рд░рдгреЛрдВ рдХреЛ рджреЗрдЦрдиреЗ рдХреЗ рдмрд╛рдж рдпрд╣ рдмрд╣реБрдд рдЕрдзрд┐рдХ рд╣реЛ рдЬрд╛рдПрдЧреА рдЕрдзрд┐рдХ рд╕реНрдкрд╖реНрдЯ.

рд╡рд┐рдирд┐рд░реНрджреЗрд╢ рдХрд╛ рдореБрджреНрджрд╛ рдпрд╣ рд╣реИ рдХрд┐ рдЖрдк рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд┐рдП рдЬрд╛ рд░рд╣реЗ рдбреЗрдЯрд╛рдлрд╝реНрд░реЗрдо рдХреЗ рд▓рд┐рдП рдирдП рдореЗрдЯрд╛рдбреЗрдЯрд╛ рдХреЛ рдкреБрдирдГ рдкреНрд░рд╛рдкреНрдд, рд╕рдВрд╢реЛрдзрд┐рдд рдФрд░ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рдХрд┐рд╕реА рддрд╛рд▓рд┐рдХрд╛ рдХреЛ рд╡рд┐рд╕реНрддреГрдд рдкреНрд░рд╛рд░реВрдк рд╕реЗ рд▓рдВрдмреЗ рдкреНрд░рд╛рд░реВрдк рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд░рддреЗ рд╕рдордп рд╡рд┐рд╢рд┐рд╖реНрдЯрддрд╛рдУрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ 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

рдлреАрд▓реНрдбреНрд╕ рджреЗрд╢, iso2, iso3 рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдкрд░рд┐рд╡рд░реНрддрдирд╢реАрд▓ рд╣реИрдВ. рд╣рдорд╛рд░рд╛ рдХрд╛рдо рдХреЙрд▓рдореЛрдВ рдХреЛ рдкрд▓рдЯрдирд╛ рд╣реИ 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

рд╣рдордиреЗ рдЬреЛ рдХреБрдЫ рднреА рдХрд┐рдпрд╛ рдЙрд╕реЗ рдпреЛрдЬрдирд╛рдмрджреНрдз рд░реВрдк рд╕реЗ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдЪрд┐рддреНрд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:

рдЖрд░ рдкреИрдХреЗрдЬ рдЯрд┐рдбрд░ рдФрд░ рдЗрд╕рдХреЗ рдирдП рдлрд╝рдВрдХреНрд╢рди рдкрд┐рд╡реЛрдЯ_рд▓реЙрдиреНрдЧрд░ рдФрд░ рдкрд┐рд╡реЛрдЯ_рд╡рд╛рдЗрдбрд░

рдПрдХрд╛рдзрд┐рдХ рдорд╛рдиреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╡рд┐рд╢рд┐рд╖реНрдЯрддрд╛ (.рдорд╛рди)

рдЙрдкрд░реЛрдХреНрдд рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, рд╡рд┐рдирд┐рд░реНрджреЗрд╢рди рдХреЙрд▓рдо редрдХреАрдордд рдЗрд╕рдореЗрдВ рдХреЗрд╡рд▓ рдПрдХ рд╣реА рдорд╛рди рд╣реЛрддрд╛ рд╣реИ, рдЕрдзрд┐рдХрд╛рдВрд╢ рдорд╛рдорд▓реЛрдВ рдореЗрдВ рдпрд╣реА рд╕реНрдерд┐рддрд┐ рд╣реЛрддреА рд╣реИред

рд▓реЗрдХрд┐рди рдХрднреА-рдХрднреА рдРрд╕реА рд╕реНрдерд┐рддрд┐ рдЙрддреНрдкрдиреНрди рд╣реЛ рд╕рдХрддреА рд╣реИ рдЬрдм рдЖрдкрдХреЛ рд╡рд┐рднрд┐рдиреНрди рдбреЗрдЯрд╛ рдкреНрд░рдХрд╛рд░ рдХреЗ рдорд╛рди рд╡рд╛рд▓реЗ рдХреЙрд▓рдо рд╕реЗ рдбреЗрдЯрд╛ рдПрдХрддреНрд░ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред рдПрдХ рд╡рд┐рд░рд╛рд╕рдд рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ 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() - рдЙрд▓рдЯрд╛ рдкрд░рд┐рд╡рд░реНрддрди рд╣реИ, рдФрд░ рдЗрд╕рдХреЗ рд╡рд┐рдкрд░реАрдд рдкрдВрдХреНрддрд┐рдпреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдХрдо рдХрд░рдХреЗ рджрд┐рдирд╛рдВрдХ рдлрд╝реНрд░реЗрдо рдХреЗ рд╕реНрддрдВрднреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдмрдврд╝ рдЬрд╛рддреА рд╣реИред

рдЖрд░ рдкреИрдХреЗрдЬ рдЯрд┐рдбрд░ рдФрд░ рдЗрд╕рдХреЗ рдирдП рдлрд╝рдВрдХреНрд╢рди рдкрд┐рд╡реЛрдЯ_рд▓реЙрдиреНрдЧрд░ рдФрд░ рдкрд┐рд╡реЛрдЯ_рд╡рд╛рдЗрдбрд░

рдбреЗрдЯрд╛ рдХреЛ рд╕рдЯреАрдХ рд░реВрдк рдореЗрдВ рд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдХреЗ рдкрд░рд┐рд╡рд░реНрддрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдмрд╣реБрдд рд╣реА рдХрдо рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рд╣рд╛рд▓рд╛рдВрдХрд┐, рдпрд╣ рддрдХрдиреАрдХ рдкреНрд░рд╕реНрддреБрддрд┐рдпреЛрдВ рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХреА рдЬрд╛рдиреЗ рд╡рд╛рд▓реА рдкрд┐рд╡рдЯ рдЯреЗрдмрд▓ рдмрдирд╛рдиреЗ рдпрд╛ рдХреБрдЫ рдЕрдиреНрдп рдЙрдкрдХрд░рдгреЛрдВ рдХреЗ рд╕рд╛рде рдПрдХреАрдХрд░рдг рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧреА рд╣реЛ рд╕рдХрддреА рд╣реИред

рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХрд╛рд░реНрдп 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 рдХреЗ рд▓рд┐рдП рдЕрдореЗрд░рд┐рдХрд╛ рдХреЗ рдкреНрд░рддреНрдпреЗрдХ рд░рд╛рдЬреНрдп рдХреА рдФрд╕рдд рдЖрдп рдФрд░ рдХрд┐рд░рд╛рдП рдХреА рдЬрд╛рдирдХрд╛рд░реА рд╢рд╛рдорд┐рд▓ рд╣реИ (рдбреЗрдЯрд╛ рд╕реЗрдЯ рдкреИрдХреЗрдЬ рдореЗрдВ рдЙрдкрд▓рдмреНрдз рд╣реИ)ред tidycensus).

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

рдЕрдм рдЬрдмрдХрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдкреНрд░рддреНрдпреЗрдХ рд╕рдВрдкрд░реНрдХ рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрджреНрд╡рд┐рддреАрдп рдЖрдИрдбреА рд╣реИ, рд╣рдо рдлрд╝реАрд▓реНрдб рдФрд░ рдорд╛рди рдХреЛ рдХреЙрд▓рдо рдореЗрдВ рдмрджрд▓ рд╕рдХрддреЗ рд╣реИрдВ:

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

рдПрдХ рдЯрд┐рдкреНрдкрдгреА рдЬреЛрдбрд╝реЗрдВ