Tidyr рдкреИрдХреЗрдЬ рдФрд░ рдЙрд╕рдХреЗ рдирдП pivot_longer рдФрд░ pivot_wider рдлрд╝рдВрдХреНрд╢рдВрд╕

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


Habr├й рдкрд░ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЗрд╕ рдкреИрдХреЗрдЬ рдХреЛ рд╕рдорд░реНрдкрд┐рдд рдПрдХ рдкреНрд░рдХрд╛рд╢рди рд╣реИ , рд▓реЗрдХрд┐рди рдпрд╣ 2015 рддрдХ рд╡рд╛рдкрд╕ рдЖрддрд╛ рд╣реИред рдФрд░ рдореИрдВ рдЖрдкрдХреЛ рд╕рдмрд╕реЗ рдкреНрд░рд╛рд╕рдВрдЧрд┐рдХ рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрддрд╛рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ, рдЬреЛ рдХрдИ рджрд┐рдиреЛрдВ рдкрд╣рд▓реЗ рдЗрд╕рдХреЗ рд▓реЗрдЦрдХ рд╣реЗрдбрд▓реА рд╡рд┐рдХрдо рдиреЗ рдШреЛрд╖рдгрд╛ рдХреА рдереАред


рдЫрд╡рд┐
SJK : рдХреНрдпрд╛ рдЗрдХрдЯреНрдард╛ () рдФрд░ рдкреНрд░рд╕рд╛рд░ () рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдкрджрд╛рд╡рдирдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛?

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

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



рдЯрд┐рдбреНрдбрд╛рдЯрд╛ рдХреЙрдиреНрд╕реЗрдкреНрдЯ


Tidyr рдХрд╛ рдЙрджреНрджреЗрд╢реНрдп рдЖрдкрдХреЛ рдбреЗрдЯрд╛ рдХреЛ рддрдерд╛рдХрдерд┐рдд рд╕реНрд╡рдЪреНрдЫ рдЙрдкрд╕реНрдерд┐рддрд┐ рдореЗрдВ рд▓рд╛рдиреЗ рдореЗрдВ рдорджрдж рдХрд░рдирд╛ рд╣реИред рд╕рдЯреАрдХ рдбреЗрдЯрд╛ рд╡рд╣ рдбреЗрдЯрд╛ рд╣реИ рдЬрд╣рд╛рдВ:


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

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


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


рдЯреЗрдмрд▓ рдмрджрд▓рдиреЗ рдХреЗ рд▓рд┐рдП tidyr рдореЗрдВ рдлрд╝рдВрдХреНрд╢рдВрд╕ рдХрд╛ рдПрдХ рд╕реЗрдЯ рд╣реЛрддрд╛ рд╣реИ:


  • fill() - рдкрд┐рдЫрд▓реЗ рдорд╛рдиреЛрдВ рдХреЗ рд╕рд╛рде рдХреЙрд▓рдо рдореЗрдВ рдЕрдиреБрдкрд▓рдмреНрдз рдорд╛рдиреЛрдВ рдХреЛ рднрд░рдирд╛;
  • separate() - рдПрдХ рд╡рд┐рднрд╛рдЬрдХ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдХрдИ рдореЗрдВ рдПрдХ рдХреНрд╖реЗрддреНрд░ рдХреЛ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд░рддрд╛ рд╣реИ;
  • unite() - рдПрдХ рдореЗрдВ рдХрдИ рдлрд╝реАрд▓реНрдбреНрд╕ рдХреЗ рд╕рдВрдпреЛрдЬрди рдХрд╛ рд╕рдВрдЪрд╛рд▓рди рдХрд░рддрд╛ рд╣реИ, separate() рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЙрд▓рдЯрд╛;
  • pivot_longer() - рдПрдХ рдлрд╝рдВрдХреНрд╢рди рдЬреЛ рдПрдХ рд╡рд┐рд╕реНрддреГрдд рдкреНрд░рд╛рд░реВрдк рд╕реЗ рдбреЗрдЯрд╛ рдХреЛ рдПрдХ рд▓рдВрдмреЗ рд╕рдордп рддрдХ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд░рддрд╛ рд╣реИ;
  • pivot_wider() - рдПрдХ рдлрд╝рдВрдХреНрд╢рди рдЬреЛ рдбреЗрдЯрд╛ рдХреЛ рдПрдХ рд▓рдВрдмреЗ рдкреНрд░рд╛рд░реВрдк рд╕реЗ рд╡рд┐рд╕реНрддреГрдд рдПрдХ рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд░рддрд╛ рд╣реИред рдСрдкрд░реЗрд╢рди pivot_longer() рдлрд╝рдВрдХреНрд╢рди рджреНрд╡рд╛рд░рд╛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХреЗ рд╡рд┐рдкрд░реАрдд рд╣реИред
  • gather() рдкрджрд╛рд╡рдирдд - рдПрдХ рдлрд╝рдВрдХреНрд╢рди рдЬреЛ рдПрдХ рд╡рд┐рд╕реНрддреГрдд рдкреНрд░рд╛рд░реВрдк рд╕реЗ рдбреЗрдЯрд╛ рдХреЛ рдПрдХ рд▓рдВрдмреЗ рд╕рдордп рддрдХ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд░рддрд╛ рд╣реИ;
  • spread() рдкрджрд╛рд╡рдирдд - рдПрдХ рдлрд╝рдВрдХреНрд╢рди рдЬреЛ рдПрдХ рд▓рдВрдмреЗ рдкреНрд░рд╛рд░реВрдк рд╕реЗ рдбреЗрдЯрд╛ рдХреЛ рд╡рд┐рд╕реНрддреГрдд рд░реВрдк рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд░рддрд╛ рд╣реИред gather() рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЙрд▓реНрдЯрд╛ рд╕рдВрдЪрд╛рд▓рди рдХрд░рддрд╛ рд╣реИред

рд╡реНрдпрд╛рдкрдХ рдкреНрд░рд╛рд░реВрдк рд╕реЗ рдбреЗрдЯрд╛ рдХреЛ рд▓рдВрдмреЗ рдкреНрд░рд╛рд░реВрдк рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд░рдиреЗ рдХреА рдирдИ рдЕрд╡рдзрд╛рд░рдгрд╛ рдФрд░ рдЗрд╕рдХреЗ рд╡рд┐рдкрд░реАрдд


рдкрд╣рд▓реЗ, рдЗрд╕ рддрд░рд╣ рдХреЗ рдкрд░рд┐рд╡рд░реНрддрди рдХреЗ рд▓рд┐рдП рдлрд╝рдВрдХреНрд╢рдВрд╕ gather() рдФрд░ spread() рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ spread() ред рдЗрди рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рдЕрд╕реНрддрд┐рддреНрд╡ рдХреЗ рд╡рд░реНрд╖реЛрдВ рдореЗрдВ, рдпрд╣ рд╕реНрдкрд╖реНрдЯ рд╣реЛ рдЧрдпрд╛ рд╣реИ рдХрд┐ рдЕрдзрд┐рдХрд╛рдВрд╢ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЗ рд▓рд┐рдП, рдкреИрдХреЗрдЬ рдХреЗ рд▓реЗрдЦрдХ рд╕рд╣рд┐рдд, рдЗрди рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рдирд╛рдо рдФрд░ рдЙрдирдХреЗ рддрд░реНрдХ рдХрд╛рдлреА рд╕реНрдкрд╖реНрдЯ рдирд╣реАрдВ рдереЗ, рдФрд░ рдЙрдиреНрд╣реЗрдВ рдЦреЛрдЬрдиреЗ рдФрд░ рд╕рдордЭрдиреЗ рдореЗрдВ рдХрдард┐рдирд╛рдЗрдпреЛрдВ рдХрд╛ рдХрд╛рд░рдг рдмрдирд╛ рдХрд┐ рдЗрдирдореЗрдВ рд╕реЗ рдХреМрди рд╕рд╛ рдХрд╛рд░реНрдп рд╡реНрдпрд╛рдкрдХ рд░реВрдк рд╕реЗ рд▓рдВрдмреЗ рд╕рдордп рддрдХ рдХреА рддрд╛рд░реАрдЦ рдХреЗ рдлреНрд░реЗрдо рдХреЛ рд▓рд╛рддрд╛ рд╣реИред рдкреНрд░рд╛рд░реВрдк рдФрд░ рдЗрд╕рдХреЗ рд╡рд┐рдкрд░реАрддред


рдЗрд╕ рд╕рдВрдмрдВрдз рдореЗрдВ, рджреЛ рдирдП рдорд╣рддреНрд╡рдкреВрд░реНрдг рдХрд╛рд░реНрдпреЛрдВ рдХреЛ tidyr рдореЗрдВ рдЬреЛрдбрд╝рд╛ рдЧрдпрд╛ рдерд╛ , рдЬреЛ рдХрд┐ рджрд┐рдирд╛рдВрдХ рдлрд╝реНрд░реЗрдо рдХреЛ рдмрджрд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдбрд┐рдЬрд╝рд╛рдЗрди рдХрд┐рдП рдЧрдП рд╣реИрдВред


рдирдП рдХрд╛рд░реНрдп pivot_longer() рдФрд░ pivot_wider() рдЬреЙрди рдорд╛рдЙрдВрдЯ рдФрд░ рдиреАрдирд╛ рдЬрд╝реБрдореЗрд▓ рджреНрд╡рд╛рд░рд╛ рдмрдирд╛рдП рдЧрдП cdata рдкреИрдХреЗрдЬ рдореЗрдВ рдХреБрдЫ рдХрд╛рд░реНрдпреЛрдВ рд╕реЗ рдкреНрд░реЗрд░рд┐рдд рдереЗред


Tidyr 0.8.3.9000 рдХрд╛ рд╕рдмрд╕реЗ рд╡рд░реНрддрдорд╛рди рд╕рдВрд╕реНрдХрд░рдг рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдирд╛


Tidyr 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() рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рдЙрдкрд░реЛрдХреНрдд рдЙрджрд╛рд╣рд░рдгреЛрдВ рдореЗрдВ, names_to рдФрд░ рдорд╛рди_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 рд╡реИрд░рд┐рдПрдмрд▓ рдХрд╛ рдирд╛рдо рджреЗрддрд╛ рд╣реИ, рдЬреЛ рд╕рдореНрдорд┐рд▓рд┐рдд рдХрд┐рдП рдЧрдП рд╕реНрддрдВрднреЛрдВ рдХреЗ рд╕реЗрд▓ рдорд╛рдиреЛрдВ рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рдбреЗрдЯрд╛ рд╕реЗ рдмрдирд╛рдпрд╛ рдЬрд╛рдПрдЧрд╛ред

рд╡рд┐рдирд┐рд░реНрджреЗрд╢


рдпрд╣ рдЯрд┐рдбрд┐рдпрд░ рдкреИрдХреЗрдЬ рдХреА рдирдИ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рд╣реИ, рдЬреЛ рдЕрдкреНрд░рдЪрд▓рд┐рдд рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддреЗ рд╕рдордп рдкрд╣рд▓реЗ рдЕрдиреБрдкрд▓рдмреНрдз рдерд╛ред


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


  • .name рдореЗрдВ рдХреЙрд▓рдо рдХрд╛ рдореВрд▓ рдирд╛рдо рд╣реЛрддрд╛ рд╣реИред
  • .value рдореЗрдВ рдЙрд╕ рдХреЙрд▓рдо рдХрд╛ рдирд╛рдо рд╣реЛрддрд╛ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рд╕реЗрд▓ рд╡реИрд▓реНрдпреВ рдЬрд╛рдПрдЧреАред

рд╡рд┐рдирд┐рд░реНрджреЗрд╢ рдХреЗ рд╢реЗрд╖ рдХреЙрд▓рдо рдпрд╣ рджрд░реНрд╢рд╛рддреЗ рд╣реИрдВ рдХрд┐ рдирдП рдХреЙрд▓рдо рдореЗрдВ .name рд╕реЗ рд╕рдВрдХреБрдЪрд┐рдд рдХрд░рдиреЗ рдпреЛрдЧреНрдп рдХреЙрд▓рдо рдХрд╛ рдирд╛рдо рдХреИрд╕реЗ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред


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


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


pivot_longer_spec() рдлрд╝рдВрдХреНрд╢рди рдХрд╛ pivot_longer_spec() рд╡рд┐рд╢рд┐рд╖реНрдЯрддрд╛рдУрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП pivot_longer_spec() рд╣реИ, рдЬрдм рдПрдХ рд╡рд┐рд╕реНрддреГрдд рдкреНрд░рд╛рд░реВрдк рд╕реЗ рддрд╛рд▓рд┐рдХрд╛ рдХреЛ рд▓рдВрдмреЗ рд╕рдордп рддрдХ рдкрд░рд┐рд╡рд░реНрддрд┐рдд pivot_longer_spec() рд╣реИред


рдпрд╣ рдлрд╝рдВрдХреНрд╢рди рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рдпрд╣ рдХрд┐рд╕реА рднреА рддрд╛рд░реАрдЦ рдХреЗ рдлреНрд░реЗрдо рдХреЛ рд▓реЗрддрд╛ рд╣реИ, рдФрд░ рдКрдкрд░ рд╡рд░реНрдгрд┐рдд рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдЗрд╕рдХреА рдореЗрдЯрд╛рдбреЗрдЯрд╛ рдЙрддреНрдкрдиреНрди рдХрд░рддрд╛ рд╣реИред


рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЖрдЗрдП рдЙрди рдбреЗрдЯрд╛рд╕реЗрдЯ рдХреЛ рд▓реЗрдВ рдЬреЛ рдХрд┐ tidyr рдкреИрдХреЗрдЬ рдХреЗ рд╕рд╛рде рдЖрддреЗ рд╣реИрдВред рдЗрд╕ рдбреЗрдЯрд╛рд╕реЗрдЯ рдореЗрдВ рдЕрдВрддрд░рд░рд╛рд╖реНрдЯреНрд░реАрдп рд╕реНрд╡рд╛рд╕реНрдереНрдп рд╕рдВрдЧрдарди рджреНрд╡рд╛рд░рд╛ рддрдкреЗрджрд┐рдХ рдХреА рдШрдЯрдирд╛рдУрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реА рджреА рдЧрдИ рд╣реИред


 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 рдЖрдпреБ рд╕реАрдорд╛ред

рд╣рдо 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 

рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ .name рдХреЙрд▓рдо рдЕрдкрд░рд┐рд╡рд░реНрддрд┐рдд рд░рд╣рдирд╛ рдЪрд╛рд╣рд┐рдП, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рд╕реНрд░реЛрдд рдбреЗрдЯрд╛рд╕реЗрдЯ рдХреЗ рдХреЙрд▓рдо рдирд╛рдореЛрдВ рдореЗрдВ рд╣рдорд╛рд░рд╛ рд╕реВрдЪрдХрд╛рдВрдХ рд╣реИред


рд▓рд┐рдВрдЧ рдФрд░ рдЖрдпреБ ( рд▓рд┐рдВрдЧ рдФрд░ рдЖрдпреБ рд╕реНрддрдВрдн) рдирд┐рд╢реНрдЪрд┐рдд рдФрд░ рдЬреНрдЮрд╛рдд рдореВрд▓реНрдп рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рдЗрди рд╕реНрддрдВрднреЛрдВ рдХреЛ рдХрд╛рд░рдХреЛрдВ рдореЗрдВ рдмрджрд▓рдиреЗ рдХреА рд╕рд┐рдлрд╛рд░рд┐рд╢ рдХреА рдЬрд╛рддреА рд╣реИ:


 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 

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


рдЫрд╡рд┐


рдХрдИ рдореВрд▓реНрдпреЛрдВ (.value) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╡рд┐рд╢рд┐рд╖реНрдЯрддрд╛


рдЙрдкрд░реЛрдХреНрдд рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, .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")) - .name рдХреЙрд▓рдо рдХреЛ рдЕрд▓рдЧ рдХрд░реЗрдВ, рдЬрд┐рд╕рдореЗрдВ рд╕реНрд░реЛрдд рдлрд╝реАрд▓реНрдб рдХреЗ рдирд╛рдо рд╢рд╛рдорд┐рд▓ рд╣реИрдВ, рдЕрдВрдбрд░рд╕реНрдХреЛрд░ рдФрд░ рд╡реИрд▓реНрдпреВ рдХреЛ .value рдФрд░ рдЪрд╛рдЗрд▓реНрдб рдХреЙрд▓рдо рдореЗрдВ рдбрд╛рд▓реЗрдВред
  • 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) рдореВрд▓ df рд▓реМрдЯрд╛рдПрдЧрд╛ред


рдПрдХ рд╡рд┐рд╕реНрддреГрдд рдкреНрд░рд╛рд░реВрдк рдореЗрдВ рдПрдХ рддрд╛рд▓рд┐рдХрд╛ рдХрд╛рд╕реНрдЯрд┐рдВрдЧ рдХрд╛ рд╕рдмрд╕реЗ рд╕рд░рд▓ рдЙрджрд╛рд╣рд░рдг


pivot_wider() рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд╕рдВрдЪрд╛рд▓рди рдХреЛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо fish_encounters рдбреЗрдЯрд╛рд╕реЗрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗ, рдЬреЛ рдЗрд╕ рдмрд╛рдд рдХреА рдЬрд╛рдирдХрд╛рд░реА рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдирджреА рдХреЗ рдХрд┐рдирд╛рд░реЗ рд╡рд┐рднрд┐рдиреНрди рд╕реНрдЯреЗрд╢рди рдордЫрд▓реА рдХреЗ рдЖрд╡рд╛рдЧрдорди рдХреЛ рдХреИрд╕реЗ рд░рд┐рдХреЙрд░реНрдб рдХрд░рддреЗ рд╣реИрдВред


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

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


рд╣рд╛рд▓рд╛рдБрдХрд┐, рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рд╣рдо рдЬрд╛рдирддреЗ рд╣реИрдВ рдХрд┐ рд░рд┐рдХреЙрд░реНрдб рдХреА рдЕрдиреБрдкрд╕реНрдерд┐рддрд┐ рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐ рдордЫрд▓реА рдкрд░ рдзреНрдпрд╛рди рдирд╣реАрдВ рджрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рдЗрд╕рд▓рд┐рдП рд╣рдо 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 

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


 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_wider() рд╡рд┐рдирд┐рд░реНрджреЗрд╢ pivot_wider() рдХреЗ рд╡рд┐рдкрд░реАрдд рд╣реЛрддрд╛ рд╣реИ: pivot_longer() рдореЗрдВ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХреЙрд▓рдо 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 

рдирдИ tidyr рдЕрд╡рдзрд╛рд░рдгрд╛ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рдХреБрдЫ рдЙрдиреНрдирдд рдЙрджрд╛рд╣рд░рдг


рдЙрджрд╛рд╣рд░рдг рдХреЗ рд░реВрдк рдореЗрдВ рдЕрдореЗрд░рд┐рдХреА рд░рд╛рдЬрд╕реНрд╡ рдФрд░ рдХрд┐рд░рд╛рдпреЗ рдХреА рдЬрдирдЧрдгрдирд╛ рдбреЗрдЯрд╛рд╕реЗрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрдХ рд╕рд╛рдл рдЙрдкрд╕реНрдерд┐рддрд┐ рдХреЗ рд▓рд┐рдП рдбреЗрдЯрд╛ рд▓рд╛рдирд╛


Us_rent_income рдбреЗрдЯрд╛рд╕реЗрдЯ рдореЗрдВ рдпреВрдПрд╕рдП рдореЗрдВ 2017 рдХреЗ рд▓рд┐рдП рдкреНрд░рддреНрдпреЗрдХ рд░рд╛рдЬреНрдп рдХреА рдФрд╕рдд рдЖрдп рдФрд░ рдХрд┐рд░рд╛рдП рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реА рд╣реЛрддреА рд╣реИ (рдбреЗрдЯрд╛рд╕реЗрдЯ tidycanim рдкреИрдХреЗрдЬ рдореЗрдВ рдЙрдкрд▓рдмреНрдз рд╣реИ)ред


 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 

рдЬрд┐рд╕ рд░реВрдк рдореЗрдВ рдбреЗрдЯрд╛ us_rent_income рдбреЗрдЯрд╛рд╕реЗрдЯ рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЙрд╕рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдирд╛ рдЕрддреНрдпрдВрдд рдЕрд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╣рдо рд╕реНрддрдВрднреЛрдВ рдХреЗ рд╕рд╛рде рдПрдХ рдбреЗрдЯрд╛ рд╕реЗрдЯ рдмрдирд╛рдирд╛ рдЪрд╛рд╣реЗрдВрдЧреЗ: рдХрд┐рд░рд╛рдпрд╛ , rent_moe , рдЖрдУ , income_moe ред рдЗрд╕ рд╡рд┐рдирд┐рд░реНрджреЗрд╢ рдХреЛ рдмрдирд╛рдиреЗ рдХреЗ рдХрдИ рддрд░реАрдХреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдореБрдЦреНрдп рдмрд╛рдд рдпрд╣ рд╣реИ рдХрд┐ рд╣рдореЗрдВ рдЪрд░ рдореВрд▓реНрдпреЛрдВ рдФрд░ рдЕрдиреБрдорд╛рди / рдореЛ рдХреЗ рдкреНрд░рддреНрдпреЗрдХ рд╕рдВрдпреЛрдЬрди рдХреЛ рдЙрддреНрдкрдиреНрди рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдФрд░ рдлрд┐рд░ рд╕реНрддрдВрдн рдирд╛рдо рдЙрддреНрдкрдиреНрди рдХрд░реЗрдВред


  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 

рд╡рд┐рд╢реНрд╡ рдмреИрдВрдХ


рдХрднреА-рдХрднреА рдбреЗрдЯрд╛ рд╕реЗрдЯ рдХреЛ рд╕рд╣реА рд░реВрдк рдореЗрдВ рд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХрдИ рдЪрд░рдгреЛрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред
World_bank_pop рдбреЗрдЯрд╛рд╕реЗрдЯ рдореЗрдВ 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 

тАФ indicator.
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. * , . : area тАФ (total urban) (population growth):


 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 

variable :


 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", "john@google.com", "name", "Huxley Ratcliffe" ) 

, , , . , , ("name"), , , field тАЬnameтАЭ:


 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 john@google.com 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 john@google.com #> 3 3 Huxley Ratcliffe <NA> <NA> 

рдирд┐рд╖реНрдХрд░реНрд╖


, tidyr , spread() gather() . pivot_longer() pivot_wider() .

Source: https://habr.com/ru/post/hi444622/


All Articles