рдкреЕрдХреЗрдЬ рд╡реНрдпрд╡рд╕реНрдерд┐рдд R рднрд╛рд╖реЗрддреАрд▓ рд╕рд░реНрд╡рд╛рдд рд▓реЛрдХрдкреНрд░рд┐рдп рд▓рд╛рдпрдмреНрд░рд░реАрдВрдкреИрдХреА рдПрдХрд╛рдордзреНрдпреЗ рд╕рдорд╛рд╡рд┐рд╖реНрдЯ рдЖрд╣реЗ - рдиреАрдЯрдиреЗрдЯрдХрд╛.
рдкреЕрдХреЗрдЬрдЪрд╛ рдореБрдЦреНрдп рдЙрджреНрджреЗрд╢ рдбреЗрдЯрд╛ рдЕрдЪреВрдХ рд╕реНрд╡рд░реВрдкрд╛рдд рдЖрдгрдгреЗ рд╣рд╛ рдЖрд╣реЗ.
Habr├й рд╡рд░ рдЖрдзреАрдЪ рдЙрдкрд▓рдмреНрдз рдЖрд╣реЗ рдпрд╛ рдкреЕрдХреЗрдЬрд╕рд╛рдареА рд╕рдорд░реНрдкрд┐рдд рдЖрд╣реЗ, рдкрд░рдВрддреБ рддреЗ 2015 рдЪреЗ рдЖрд╣реЗ. рдЖрдгрд┐ рдорд▓рд╛ рддреБрдореНрд╣рд╛рд▓рд╛ рд╕рд░реНрд╡рд╛рдд рд╡рд░реНрддрдорд╛рди рдмрджрд▓рд╛рдВрдмрджреНрджрд▓ рд╕рд╛рдВрдЧрд╛рдпрдЪреЗ рдЖрд╣реЗ, рдЬреЗ рдХрд╛рд╣реА рджрд┐рд╡рд╕рд╛рдВрдкреВрд░реНрд╡реА рддреНрдпрд╛рдЪреЗ рд▓реЗрдЦрдХ рд╣реЗрдбрд▓реА рд╡рд┐рдХрд╣реЕрдо рдпрд╛рдВрдиреА рдЬрд╛рд╣реАрд░ рдХреЗрд▓реЗ рд╣реЛрддреЗ.

рдПрд╕рдЬреЗрдХреЗ: gather() рдЖрдгрд┐ spread() рдирд╛рдкрд╕рдВрдд рдХреЗрд▓реЗ рдЬрд╛рдИрд▓?
рд╣реЕрдбрд▓реА рд╡рд┐рдХрд╣реЕрдо: рдХрд╛рд╣реА рдкреНрд░рдорд╛рдгрд╛рдд. рдЖрдореНрд╣реА рдпрд╛рдкреБрдвреЗ рдпрд╛ рдлрдВрдХреНрд╢рдиреНрд╕рдЪреНрдпрд╛ рд╡рд╛рдкрд░рд╛рдЪреА рд╢рд┐рдлрд╛рд░рд╕ рдХрд░рдгрд╛рд░ рдирд╛рд╣реА рдЖрдгрд┐ рддреНрдпрд╛рдордзреАрд▓ рджреЛрд╖ рджреВрд░ рдХрд░рдгрд╛рд░ рдирд╛рд╣реА, рдкрд░рдВрддреБ рддреЗ рддреНрдпрд╛рдВрдЪреНрдпрд╛ рд╕рдзреНрдпрд╛рдЪреНрдпрд╛ рд╕реНрдерд┐рддреАрдд рдкреЕрдХреЗрдЬрдордзреНрдпреЗ рдЙрдкрд╕реНрдерд┐рдд рд░рд╛рд╣рддреАрд▓.
рд╕рд╛рдордЧреНрд░реА
рддреБрдореНрд╣рд╛рд▓рд╛ рдбреЗрдЯрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдгрд╛рдордзреНрдпреЗ рд╕реНрд╡рд╛рд░рд╕реНрдп рдЕрд╕рд▓реНрдпрд╛рд╕, рддреБрдореНрд╣рд╛рд▓рд╛ рдорд╛рдЭреНрдпрд╛рдордзреНрдпреЗ рд╕реНрд╡рд╛рд░рд╕реНрдп рдЕрд╕реЗрд▓ ╨╕ рдЪреЕрдиреЗрд▓ рдмрд╣реБрддреЗрдХ рд╕рд╛рдордЧреНрд░реА рдЖрд░ рднрд╛рд╖реЗрд▓рд╛ рд╕рдорд░реНрдкрд┐рдд рдЖрд╣реЗ.
рд╡реНрдпрд╡рд╕реНрдерд┐рдд рдбреЗрдЯрд╛ рд╕рдВрдХрд▓реНрдкрдирд╛
рдЧреЛрд▓ рд╡реНрдпрд╡рд╕реНрдерд┐рдд тАФ рддреБрдореНрд╣рд╛рд▓рд╛ рдбреЗрдЯрд╛ рдПрдХрд╛ рддрдерд╛рдХрдерд┐рдд рд╡реНрдпрд╡рд╕реНрдерд┐рдд рд╕реНрд╡рд░реВрдкрд╛рдд рдЖрдгрдгреНрдпрд╛рдд рдорджрдд рдХрд░рд╛. рдиреАрдЯ рдбреЗрдЯрд╛ рдЕрд╕рд╛ рдбреЗрдЯрд╛ рдЖрд╣реЗ рдЬреЗрдереЗ:
- рдкреНрд░рддреНрдпреЗрдХ рд╡реНрд╣реЗрд░рд┐рдПрдмрд▓ рдПрдХрд╛ рд╕реНрддрдВрднрд╛рдд рдЖрд╣реЗ.
- рдкреНрд░рддреНрдпреЗрдХ рдирд┐рд░реАрдХреНрд╖рдг рдПрдХ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдЖрд╣реЗ.
- рдкреНрд░рддреНрдпреЗрдХ рдореВрд▓реНрдп рдПрдХ рд╕реЗрд▓ рдЖрд╣реЗ.
рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдЖрдпреЛрдЬрд┐рдд рдХрд░рддрд╛рдирд╛ рдиреАрдЯрдиреЗрдЯрдХрд╛ рдбреЗрдЯрд╛рдордзреНрдпреЗ рд╕рд╛рджрд░ рдХреЗрд▓реЗрд▓реНрдпрд╛ рдбреЗрдЯрд╛рд╕рд╣ рдХрд╛рд░реНрдп рдХрд░рдгреЗ рдЦреВрдк рд╕реЛрдкреЗ рдЖрдгрд┐ рдЕрдзрд┐рдХ рд╕реЛрдпреАрд╕реНрдХрд░ рдЖрд╣реЗ.
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 рддреНрдпрд╛рдВрдЪреА рдирд╛рд╡реЗ рдЕрд╡рддрд░рдг рдЪрд┐рдиреНрд╣рд╛рдВрдордзреНрдпреЗ рдЕрд╕рдгреЗ рдЖрд╡рд╢реНрдпрдХ рдЖрд╣реЗ.
рдПрдХ рд╕рд╛рд░рдгреА рдЬреА рддреБрдореНрд╣рд╛рд▓рд╛ рдирд╡реАрди рд╕рдВрдХрд▓реНрдкрдиреЗрд╕рд╣ рдХрд╛рд░реНрдп рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рдХрд╕реЗ рд╕реНрд╡рд┐рдЪ рдХрд░рд╛рд╡реЗ рд╣реЗ рд╕рд╣рдЬрдкрдгреЗ рд╢реЛрдзрдгреНрдпрд╛рдд рдорджрдд рдХрд░реЗрд▓ рд╡реНрдпрд╡рд╕реНрдерд┐рдд.

рд▓реЗрдЦрдХрд╛рдХрдбреВрди рдЯреАрдк
рдЦрд╛рд▓реАрд▓ рд╕рд░реНрд╡ рдордЬрдХреВрд░ рдЕрдиреБрдХреВрд▓реА рдЖрд╣реЗ, рдореА рд╡рд┐рдирд╛рдореВрд▓реНрдп рднрд╛рд╖рд╛рдВрддрд░ рджреЗрдЦреАрд▓ рдореНрд╣рдгреЗрди рдЕрдзрд┐рдХреГрдд tidyverse рд▓рд╛рдпрдмреНрд░рд░реА рд╡реЗрдмрд╕рд╛рдЗрдЯрд╡рд░реВрди.
рдбреЗрдЯрд╛ рд░реБрдВрдж рддреЗ рд▓рд╛рдВрдм рдлреЙрд░рдореЕрдЯрдордзреНрдпреЗ рд░реВрдкрд╛рдВрддрд░рд┐рдд рдХрд░рдгреНрдпрд╛рдЪреЗ рдПрдХ рд╕рд╛рдзреЗ рдЙрджрд╛рд╣рд░рдг
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рдлреАрд▓реНрдб рджреЗрд╢рд╛рддреАрд▓, isoxnumx, isoxnumx рдЖрдзреАрдЪ рд╡реНрд╣реЗрд░рд┐рдПрдмрд▓реНрд╕ рдЖрд╣реЗрдд. рдЖрдордЪреЗ рдХрд╛рд░реНрдп рд╕реНрддрдВрдн рдлреНрд▓рд┐рдк рдХрд░рдгреЗ рдЖрд╣реЗ new_sp_m014 рд╡рд░ newrel_f65.
рдпрд╛ рд╕реНрддрдВрднрд╛рдВрдЪреА рдирд╛рд╡реЗ рдЦрд╛рд▓реАрд▓ рдорд╛рд╣рд┐рддреА рд╕рдВрдЧреНрд░рд╣рд┐рдд рдХрд░рддрд╛рдд:
- рдЙрдкрд╕рд░реНрдЧ
new_рд╣реЗ рд╕реВрдЪрд┐рдд рдХрд░рддреЗ рдХреА рд╕реНрддрдВрднрд╛рдд рдХреНрд╖рдпрд░реЛрдЧрд╛рдЪреНрдпрд╛ рдирд╡реАрди рдкреНрд░рдХрд░рдгрд╛рдВрдЪрд╛ рдбреЗрдЯрд╛ рдЖрд╣реЗ, рд╡рд░реНрддрдорд╛рди рддрд╛рд░рдЦреЗрдЪреНрдпрд╛ рдлреНрд░реЗрдордордзреНрдпреЗ рдлрдХреНрдд рдирд╡реАрди рд░реЛрдЧрд╛рдВрдмрджреНрджрд▓ рдорд╛рд╣рд┐рддреА рдЖрд╣реЗ, рддреНрдпрд╛рдореБрд│реЗ рд╕рдзреНрдпрд╛рдЪреНрдпрд╛ рд╕рдВрджрд░реНрднрд╛рдд рдпрд╛ рдЙрдкрд╕рд░реНрдЧрд╛рдЪрд╛ рдХрд╛рд╣реА рдЕрд░реНрде рдирд╛рд╣реА. sp/rel/sp/epрд░реЛрдЧрд╛рдЪреЗ рдирд┐рджрд╛рди рдХрд░рдгреНрдпрд╛рдЪреНрдпрд╛ рдкрджреНрдзрддреАрдЪреЗ рд╡рд░реНрдгрди рдХрд░рддреЗ.m/fрд░реБрдЧреНрдгрд╛рдЪреЗ рд▓рд┐рдВрдЧ.014/1524/2535/3544/4554/65рд░реБрдЧреНрдгрд╛рдЪреА рд╡рдп рд╢реНрд░реЗрдгреА.
рдлрдВрдХреНрд╢рди рд╡рд╛рдкрд░реВрди рдЖрдкрдг рд╣реЗ рдХреЙрд▓рдо рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд░реВ рд╢рдХрддреЛ extract()рдирд┐рдпрдорд┐рдд рдЕрднрд┐рд╡реНрдпрдХреНрддреА рд╡рд╛рдкрд░рдгреЗ.
spec <- spec %>%
extract(name, c("diagnosis", "gender", "age"), "new_?(.*)_(.)(.*)")#> # A tibble: 56 x 5
#> .name .value diagnosis gender age
#> <chr> <chr> <chr> <chr> <chr>
#> 1 new_sp_m014 count sp m 014
#> 2 new_sp_m1524 count sp m 1524
#> 3 new_sp_m2534 count sp m 2534
#> 4 new_sp_m3544 count sp m 3544
#> 5 new_sp_m4554 count sp m 4554
#> 6 new_sp_m5564 count sp m 5564
#> 7 new_sp_m65 count sp m 65
#> 8 new_sp_f014 count sp f 014
#> 9 new_sp_f1524 count sp f 1524
#> 10 new_sp_f2534 count sp f 2534
#> # тАж with 46 more rowsрдХреГрдкрдпрд╛ рд╕реНрддрдВрдн рд▓рдХреНрд╖рд╛рдд рдШреНрдпрд╛ .рдХреГрдкрдпрд╛ рдореВрд│ рдбреЗрдЯрд╛рд╕реЗрдЯрдЪреНрдпрд╛ рд╕реНрддрдВрдн рдирд╛рд╡рд╛рдВрдордзреНрдпреЗ рд╣реА рдЖрдордЪреА рдЕрдиреБрдХреНрд░рдордгрд┐рдХрд╛ рдЕрд╕рд▓реНрдпрд╛рдореБрд│реЗ рддреА рдЕрдкрд░рд┐рд╡рд░реНрддрд┐рдд рд░рд╛рд╣рд┐рд▓реА рдкрд╛рд╣рд┐рдЬреЗ.
рд▓рд┐рдВрдЧ рдЖрдгрд┐ рд╡рдп (рд╕реНрддрдВрдн рд▓рд┐рдВрдЧ ╨╕ рд╡рдп) рдордзреНрдпреЗ рдирд┐рд╢реНрдЪрд┐рдд рдЖрдгрд┐ рдЬреНрдЮрд╛рдд рдореВрд▓реНрдпреЗ рдЖрд╣реЗрдд, рдореНрд╣рдгреВрди рд╣реЗ рд╕реНрддрдВрдн рдШрдЯрдХрд╛рдВрдордзреНрдпреЗ рд░реВрдкрд╛рдВрддрд░рд┐рдд рдХрд░рдгреНрдпрд╛рдЪреА рд╢рд┐рдлрд╛рд░рд╕ рдХреЗрд▓реА рдЬрд╛рддреЗ:
spec <- spec %>%
mutate(
gender = factor(gender, levels = c("f", "m")),
age = factor(age, levels = unique(age), ordered = TRUE)
) рд╢реЗрд╡рдЯреА, рдЖрдореНрд╣реА рдореВрд│ рддрд╛рд░реАрдЦ рдлреНрд░реЗрдорд╡рд░ рддрдпрд╛рд░ рдХреЗрд▓реЗрд▓реЗ рддрдкрд╢реАрд▓ рд▓рд╛рдЧреВ рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рдХреЛрдг рдЖрдореНрд╣рд╛рд▓рд╛ рдпреБрдХреНрддрд┐рд╡рд╛рдж рд╡рд╛рдкрд░рдгреНрдпрд╛рдЪреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдЖрд╣реЗ рдЪрд╖реНрдорд╛ рдХрд╛рд░реНрдпрд╛рдд pivot_longer().
who %>% pivot_longer(spec = spec)
#> # A tibble: 405,440 x 8
#> country iso2 iso3 year diagnosis gender age count
#> <chr> <chr> <chr> <int> <chr> <fct> <ord> <int>
#> 1 Afghanistan AF AFG 1980 sp m 014 NA
#> 2 Afghanistan AF AFG 1980 sp m 1524 NA
#> 3 Afghanistan AF AFG 1980 sp m 2534 NA
#> 4 Afghanistan AF AFG 1980 sp m 3544 NA
#> 5 Afghanistan AF AFG 1980 sp m 4554 NA
#> 6 Afghanistan AF AFG 1980 sp m 5564 NA
#> 7 Afghanistan AF AFG 1980 sp m 65 NA
#> 8 Afghanistan AF AFG 1980 sp f 014 NA
#> 9 Afghanistan AF AFG 1980 sp f 1524 NA
#> 10 Afghanistan AF AFG 1980 sp f 2534 NA
#> # тАж with 405,430 more rowsрдЖрдореНрд╣реА рдЬреЗ рдХрд╛рд╣реА рдХреЗрд▓реЗ рддреЗ рдЦрд╛рд▓реАрд▓рдкреНрд░рдорд╛рдгреЗ рдпреЛрдЬрдирд╛рдмрджреНрдзрдкрдгреЗ рдЪрд┐рддреНрд░рд┐рдд рдХреЗрд▓реЗ рдЬрд╛рдК рд╢рдХрддреЗ:

рдПрдХрд╛рдзрд┐рдХ рдореВрд▓реНрдпреЗ рд╡рд╛рдкрд░реВрди рддрдкрд╢реАрд▓ (.value)
рд╡рд░реАрд▓ рдЙрджрд╛рд╣рд░рдгрд╛рдордзреНрдпреЗ, рддрдкрд╢реАрд▓ рд╕реНрддрдВрдн .рдореВрд▓реНрдп рдлрдХреНрдд рдПрдХ рдореВрд▓реНрдп рд╕рдорд╛рд╡рд┐рд╖реНрдЯ рдЖрд╣реЗ, рдмрд╣реБрддреЗрдХ рдкреНрд░рдХрд░рдгрд╛рдВрдордзреНрдпреЗ рд╣реЗ рдЕрд╕реЗ рдЖрд╣реЗ.
рдкрд░рдВрддреБ рдХрдзреАрдХрдзреА рдЕрд╢реА рдкрд░рд┐рд╕реНрдерд┐рддреА рдЙрджреНрднрд╡реВ рд╢рдХрддреЗ рдЬреЗрд╡реНрд╣рд╛ рдЖрдкрд▓реНрдпрд╛рд▓рд╛ рдореВрд▓реНрдпрд╛рдВрдордзреНрдпреЗ рднрд┐рдиреНрди рдбреЗрдЯрд╛ рдкреНрд░рдХрд╛рд░ рдЕрд╕рд▓реЗрд▓реНрдпрд╛ рд╕реНрддрдВрднрд╛рдВрдордзреВрди рдбреЗрдЯрд╛ рдЧреЛрд│рд╛ рдХрд░рдгреНрдпрд╛рдЪреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдЕрд╕рддреЗ. рд▓реЗрдЧрд╕реА рдлрдВрдХреНрд╢рди рд╡рд╛рдкрд░рдгреЗ spread() рд╣реЗ рдХрд░рдгреЗ рдЦреВрдк рдХрдареАрдг рд╣реЛрдИрд▓.
рдЦрд╛рд▓реАрд▓ рдЙрджрд╛рд╣рд░рдгрд╛рд╡рд░реВрди рдШреЗрддрд▓реЗ рдЖрд╣реЗ рдкреЕрдХреЗрдЬрд▓рд╛ рдбреЗрдЯрд╛.рдЯреЗрдмрд▓.
рдЪрд▓рд╛ рдкреНрд░рд╢рд┐рдХреНрд╖рдг рдбреЗрдЯрд╛рдлреНрд░реЗрдо рддрдпрд╛рд░ рдХрд░реВрдпрд╛.
family <- tibble::tribble(
~family, ~dob_child1, ~dob_child2, ~gender_child1, ~gender_child2,
1L, "1998-11-26", "2000-01-29", 1L, 2L,
2L, "1996-06-22", NA, 2L, NA,
3L, "2002-07-11", "2004-04-05", 2L, 2L,
4L, "2004-10-10", "2009-08-27", 1L, 1L,
5L, "2000-12-05", "2005-02-28", 2L, 1L,
)
family <- family %>% mutate_at(vars(starts_with("dob")), parse_date)#> # A tibble: 5 x 5
#> family dob_child1 dob_child2 gender_child1 gender_child2
#> <int> <date> <date> <int> <int>
#> 1 1 1998-11-26 2000-01-29 1 2
#> 2 2 1996-06-22 NA 2 NA
#> 3 3 2002-07-11 2004-04-05 2 2
#> 4 4 2004-10-10 2009-08-27 1 1
#> 5 5 2000-12-05 2005-02-28 2 1рддрдпрд╛рд░ рдХреЗрд▓реЗрд▓реНрдпрд╛ рддрд╛рд░реАрдЦ рдлреНрд░реЗрдордордзреНрдпреЗ рдкреНрд░рддреНрдпреЗрдХ рдУрд│реАрдд рдПрдХрд╛ рдХреБрдЯреБрдВрдмрд╛рддреАрд▓ рдореБрд▓рд╛рдВрдЪрд╛ рдбреЗрдЯрд╛ рдЕрд╕рддреЛ. рдХреБрдЯреБрдВрдмрд╛рдВрдирд╛ рдПрдХ рдХрд┐рдВрд╡рд╛ рджреЛрди рдореБрд▓реЗ рдЕрд╕реВ рд╢рдХрддрд╛рдд. рдкреНрд░рддреНрдпреЗрдХ рдореБрд▓рд╛рд╕рд╛рдареА, рдЬрдиреНрдорддрд╛рд░реАрдЦ рдЖрдгрд┐ рд▓рд┐рдВрдЧ рдпрд╛рд╡рд░ рдбреЗрдЯрд╛ рдкреНрд░рджрд╛рди рдХреЗрд▓рд╛ рдЬрд╛рддреЛ рдЖрдгрд┐ рдкреНрд░рддреНрдпреЗрдХ рдореБрд▓рд╛рд╕рд╛рдареА рдбреЗрдЯрд╛ рд╕реНрд╡рддрдВрддреНрд░ рд╕реНрддрдВрднрд╛рдВрдордзреНрдпреЗ рдЕрд╕рддреЛ, рд╡рд┐рд╢реНрд▓реЗрд╖рдгрд╛рд╕рд╛рдареА рд╣рд╛ рдбреЗрдЯрд╛ рдпреЛрдЧреНрдп рд╕реНрд╡рд░реВрдкрд╛рдд рдЖрдгрдгреЗ рд╣реЗ рдЖрдордЪреЗ рдХрд╛рд░реНрдп рдЖрд╣реЗ.
рдХреГрдкрдпрд╛ рд▓рдХреНрд╖рд╛рдд рдШреНрдпрд╛ рдХреА рдЖрдордЪреНрдпрд╛рдХрдбреЗ рдкреНрд░рддреНрдпреЗрдХ рдореБрд▓рд╛рдмрджреНрджрд▓ рдорд╛рд╣рд┐рддреА рдЕрд╕рд▓реЗрд▓реЗ рджреЛрди рдЪрд▓ рдЖрд╣реЗрдд: рддреНрдпрд╛рдВрдЪреЗ рд▓рд┐рдВрдЧ рдЖрдгрд┐ рдЬрдиреНрдорддрд╛рд░реАрдЦ (рдЙрдкрд╕рд░реНрдЧ рдЕрд╕рд▓реЗрд▓реЗ рд╕реНрддрдВрдн рдбреЙрдк рдЬрдиреНрдорддрд╛рд░реАрдЦ, рдЙрдкрд╕рд░реНрдЧ рдЕрд╕рд▓реЗрд▓реЗ рд╕реНрддрдВрдн рд▓рд┐рдВрдЧ рдореБрд▓рд╛рдЪреЗ рд▓рд┐рдВрдЧ рд╕рдорд╛рд╡рд┐рд╖реНрдЯ рдХрд░рд╛). рдЕрдкреЗрдХреНрд╖рд┐рдд рдкрд░рд┐рдгрд╛рдо рдЕрд╕рд╛ рдЖрд╣реЗ рдХреА рддреЗ рд╕реНрд╡рддрдВрддреНрд░ рд╕реНрддрдВрднрд╛рдВрдордзреНрдпреЗ рджрд┐рд╕рд▓реЗ рдкрд╛рд╣рд┐рдЬреЗрдд. рдХреЙрд▓рдордордзреНрдпреЗ рд╕реНрдкреЗрд╕рд┐рдлрд┐рдХреЗрд╢рди рддрдпрд╛рд░ рдХрд░реВрди рдЖрдкрдг рд╣реЗ рдХрд░реВ рд╢рдХрддреЛ .value рджреЛрди рднрд┐рдиреНрди рдЕрд░реНрде рдЕрд╕рддреАрд▓.
spec <- family %>%
pivot_longer_spec(-family) %>%
separate(col = name, into = c(".value", "child"))%>%
mutate(child = parse_number(child))
#> # A tibble: 4 x 3
#> .name .value child
#> <chr> <chr> <dbl>
#> 1 dob_child1 dob 1
#> 2 dob_child2 dob 2
#> 3 gender_child1 gender 1
#> 4 gender_child2 gender 2рддрд░, рд╡рд░реАрд▓ рдХреЛрдбрджреНрд╡рд╛рд░реЗ рдХреЗрд▓реЗрд▓реНрдпрд╛ рдХреНрд░рд┐рдпрд╛рдВрдХрдбреЗ рдЪрд░рдг-рджрд░-рдЪрд░рдг рдкрд╛рд╣реВ.
pivot_longer_spec(-family)тАФ рдлреЕрдорд┐рд▓реА рдХреЙрд▓рдо рд╡рдЧрд│рддрд╛ рд╕рд░реНрд╡ рд╡рд┐рджреНрдпрдорд╛рди рд╕реНрддрдВрдн рд╕рдВрдХреБрдЪрд┐рдд рдХрд░рдгрд╛рд░реЗ рддрдкрд╢реАрд▓ рддрдпрд╛рд░ рдХрд░рд╛.separate(col = name, into = c(".value", "child"))- рд╕реНрддрдВрдн рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд░рд╛ .рдХреГрдкрдпрд╛, рдЬреНрдпрд╛рдордзреНрдпреЗ рд╕реНрддреНрд░реЛрдд рдлреАрд▓реНрдбрдЪреА рдирд╛рд╡реЗ рдЖрд╣реЗрдд, рдЕрдВрдбрд░рд╕реНрдХреЛрд░ рд╡рд╛рдкрд░реВрди рдЖрдгрд┐ рдкрд░рд┐рдгрд╛рдореА рдореВрд▓реНрдпреЗ рд╕реНрддрдВрднрд╛рдВрдордзреНрдпреЗ рдкреНрд░рд╡рд┐рд╖реНрдЯ рдХрд░рдгреЗ .рдореВрд▓реНрдп ╨╕ рдореБрд▓рд╛рд▓рд╛.mutate(child = parse_number(child))- рдлреАрд▓реНрдб рдореВрд▓реНрдпреЗ рдмрджрд▓рд╛ рдореБрд▓рд╛рд▓рд╛ рдордЬрдХреВрд░ рддреЗ рдЕрдВрдХреАрдп рдбреЗрдЯрд╛ рдкреНрд░рдХрд╛рд░.
рдЖрддрд╛ рдЖрдкрдг рдореВрд│ рдбреЗрдЯрд╛рдлреНрд░реЗрдорд╡рд░ рдкрд░рд┐рдгрд╛рдореА рддрдкрд╢реАрд▓ рд▓рд╛рдЧреВ рдХрд░реВ рд╢рдХрддреЛ рдЖрдгрд┐ рдЯреЗрдмрд▓рд▓рд╛ рдЗрдЪреНрдЫрд┐рдд рдлреЙрд░реНрдордордзреНрдпреЗ рдЖрдгреВ рд╢рдХрддреЛ.
family %>%
pivot_longer(spec = spec, na.rm = T)#> # A tibble: 9 x 4
#> family child dob gender
#> <int> <dbl> <date> <int>
#> 1 1 1 1998-11-26 1
#> 2 1 2 2000-01-29 2
#> 3 2 1 1996-06-22 2
#> 4 3 1 2002-07-11 2
#> 5 3 2 2004-04-05 2
#> 6 4 1 2004-10-10 1
#> 7 4 2 2009-08-27 1
#> 8 5 1 2000-12-05 2
#> 9 5 2 2005-02-28 1рдЖрдореНрд╣реА рдпреБрдХреНрддрд┐рд╡рд╛рдж рд╡рд╛рдкрд░рддреЛ na.rm = TRUE, рдХрд╛рд░рдг рдбреЗрдЯрд╛рдЪреЗ рд╡рд░реНрддрдорд╛рди рд╕реНрд╡рд░реВрдк рдЕрд╕реНрддрд┐рддреНрд╡рд╛рдд рдирд╕рд▓реЗрд▓реНрдпрд╛ рдирд┐рд░реАрдХреНрд╖рдгрд╛рдВрд╕рд╛рдареА рдЕрддрд┐рд░рд┐рдХреНрдд рдкрдВрдХреНрддреА рддрдпрд╛рд░ рдХрд░рдгреНрдпрд╛рд╕ рднрд╛рдЧ рдкрд╛рдбрддреЗ. рдХрд╛рд░рдг рдХреБрдЯреБрдВрдм 2 рдордзреНрдпреЗ рдПрдХрдЪ рдореВрд▓ рдЖрд╣реЗ, na.rm = TRUE рдЖрдЙрдЯрдкреБрдЯрдордзреНрдпреЗ рдХреБрдЯреБрдВрдм 2 рдЪреА рдПрдХ рдкрдВрдХреНрддреА рдЕрд╕реЗрд▓ рдпрд╛рдЪреА рд╣рдореА рджреЗрддреЗ.
рддрд╛рд░реАрдЦ рдлреНрд░реЗрдо рд▓рд╛рдБрдЧ рдордзреВрди рд░реБрдВрдж рдлреЙрд░рдореЕрдЯрдордзреНрдпреЗ рд░реВрдкрд╛рдВрддрд░рд┐рдд рдХрд░рдд рдЖрд╣реЗ
pivot_wider() - рд╣реЗ рд╡реНрдпрд╕реНрдд рдкрд░рд┐рд╡рд░реНрддрди рдЖрд╣реЗ, рдЖрдгрд┐ рдЙрд▓рдЯ рдкрдВрдХреНрддреАрдВрдЪреА рд╕рдВрдЦреНрдпрд╛ рдХрдореА рдХрд░реВрди рддрд╛рд░реАрдЦ рдлреНрд░реЗрдордЪреНрдпрд╛ рд╕реНрддрдВрднрд╛рдВрдЪреА рд╕рдВрдЦреНрдпрд╛ рд╡рд╛рдврд╡рддреЗ.

рдбреЗрдЯрд╛ рдЕрдЪреВрдХ рд╕реНрд╡рд░реВрдкрд╛рдд рдЖрдгрдгреНрдпрд╛рд╕рд╛рдареА рдпрд╛ рдкреНрд░рдХрд╛рд░рдЪреЗ рдкрд░рд┐рд╡рд░реНрддрди рдЕрддреНрдпрдВрдд рдХреНрд╡рдЪрд┐рддрдЪ рд╡рд╛рдкрд░рд▓реЗ рдЬрд╛рддреЗ, рддрдерд╛рдкрд┐, рд╣реЗ рддрдВрддреНрд░ рд╕рд╛рджрд░реАрдХрд░рдгрд╛рдВрдордзреНрдпреЗ рд╡рд╛рдкрд░рд▓реНрдпрд╛ рдЬрд╛рдгрд╛рд▒реНрдпрд╛ рдкрд┐рд╡реНрд╣реЛрдЯ рдЯреЗрдмрд▓реНрд╕ рддрдпрд╛рд░ рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рдХрд┐рдВрд╡рд╛ рдХрд╛рд╣реА рдЗрддрд░ рд╕рд╛рдзрдирд╛рдВрд╕рд╣ рдПрдХрддреНрд░реАрдХрд░рдгрд╛рд╕рд╛рдареА рдЙрдкрдпреБрдХреНрдд рдард░реВ рд╢рдХрддреЗ.
рдкреНрд░рддреНрдпрдХреНрд╖рд╛рдд рдХрд╛рд░реНрдпреЗ 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() рдЖрдореНрд╣реА рдбреЗрдЯрд╛рд╕реЗрдЯ рд╡рд╛рдкрд░реВ рдорд╛рд╕реЗ_рднреЗрдЯрдгреЗ, рдЬреЗ рд╡рд┐рд╡рд┐рдз рд╕реНрдЯреЗрд╢рдиреНрд╕ рдирджреАрдХрд╛рдареА рдорд╛рд╢рд╛рдВрдЪреНрдпрд╛ рд╣рд╛рд▓рдЪрд╛рд▓реАрдВрдЪреА рдиреЛрдВрдж рдХрд╢реА рдХрд░рддрд╛рдд рдпрд╛рдмрджреНрджрд▓ рдорд╛рд╣рд┐рддреА рд╕рдВрдЧреНрд░рд╣рд┐рдд рдХрд░рддреЗ.
#> # 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 рдиреЗ рднрд░рд▓реЗ рдЬрд╛рдИрд▓.
рддрдерд╛рдкрд┐, рдпрд╛ рдкреНрд░рдХрд░рдгрд╛рдд рдЖрдореНрд╣рд╛рд▓рд╛ рдорд╛рд╣рд┐рдд рдЖрд╣реЗ рдХреА рд░реЗрдХреЙрд░реНрдб рдирд╕рдгреЗ рдореНрд╣рдгрдЬреЗ рдорд╛рд╕реЗ рджрд┐рд╕рд▓реЗ рдирд╛рд╣реАрдд, рдореНрд╣рдгреВрди рдЖрдореНрд╣реА рдпреБрдХреНрддрд┐рд╡рд╛рдж рд╡рд╛рдкрд░реВ рд╢рдХрддреЛ values_fill рдХрд╛рд░реНрдпрд╛рдд 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 valuedf %>% 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 рд╕рдВрдХрд▓реНрдкрдиреЗрд╕рд╣ рдХрд╛рд░реНрдп рдХрд░рдгреНрдпрд╛рдЪреА рдЕрдиреЗрдХ рдкреНрд░рдЧрдд рдЙрджрд╛рд╣рд░рдгреЗ
рдЙрджрд╛рд╣рд░рдг рдореНрд╣рдгреВрди рдпреВрдПрд╕ рдЬрдирдЧрдгрдирд╛ рдЙрддреНрдкрдиреНрди рдЖрдгрд┐ рднрд╛рдбреЗ рдбреЗрдЯрд╛рд╕реЗрдЯ рд╡рд╛рдкрд░реВрди рдбреЗрдЯрд╛ рд╕рд╛рдл рдХрд░рдгреЗ.
рдбреЗрдЯрд╛ рд╕реЗрдЯ рдЖрдореНрд╣рд╛рд▓рд╛_рднрд╛рдбреЗ_рдЙрддреНрдкрдиреНрди 2017 рд╕рд╛рдареА рдпреВрдПрд╕ рдордзреАрд▓ рдкреНрд░рддреНрдпреЗрдХ рд░рд╛рдЬреНрдпрд╛рд╕рд╛рдареА рд╕рд░рд╛рд╕рд░реА рдЙрддреНрдкрдиреНрди рдЖрдгрд┐ рднрд╛рдбреЗ рдорд╛рд╣рд┐рддреА рд╕рдорд╛рд╡рд┐рд╖реНрдЯ рдЖрд╣реЗ (рдбреЗрдЯрд╛ рд╕рдВрдЪ рдкреЕрдХреЗрдЬрдордзреНрдпреЗ рдЙрдкрд▓рдмреНрдз рдЖрд╣реЗ рд╡реНрдпрд╡рд╕реНрдерд┐рдд рдЬрдирдЧрдгрдирд╛).
us_rent_income
#> # A tibble: 104 x 5
#> GEOID NAME variable estimate moe
#> <chr> <chr> <chr> <dbl> <dbl>
#> 1 01 Alabama income 24476 136
#> 2 01 Alabama rent 747 3
#> 3 02 Alaska income 32940 508
#> 4 02 Alaska rent 1200 13
#> 5 04 Arizona income 27517 148
#> 6 04 Arizona rent 972 4
#> 7 05 Arkansas income 23789 165
#> 8 05 Arkansas rent 709 5
#> 9 06 California income 29454 109
#> 10 06 California rent 1358 3
#> # тАж with 94 more rowsрдбреЗрдЯрд╛рд╕реЗрдЯрдордзреНрдпреЗ рдбреЗрдЯрд╛ рдЬреНрдпрд╛ рдлреЙрд░реНрдордордзреНрдпреЗ рд╕рдВрдЧреНрд░рд╣рд┐рдд рдХреЗрд▓рд╛ рдЬрд╛рддреЛ рдЖрдореНрд╣рд╛рд▓рд╛_рднрд╛рдбреЗ_рдЙрддреНрдкрдиреНрди рддреНрдпрд╛рдВрдЪреНрдпрд╛рд╕рд╣ рдХрд╛рд░реНрдп рдХрд░рдгреЗ рдЕрддреНрдпрдВрдд рдЧреИрд░рд╕реЛрдпреАрдЪреЗ рдЖрд╣реЗ, рдореНрд╣рдгреВрди рдЖрдореНрд╣реА рд╕реНрддрдВрднрд╛рдВрд╕рд╣ рдбреЗрдЯрд╛ рд╕реЗрдЯ рддрдпрд╛рд░ рдХрд░реВ рдЗрдЪреНрдЫрд┐рддреЛ: рднрд╛рдбреЗ, рднрд╛рдбреЗ_рдореЛ, рдЖрд▓реЗ, рдЙрддреНрдкрдиреНрди_moe. рд╣реЗ рддрдкрд╢реАрд▓ рддрдпрд╛рд░ рдХрд░рдгреНрдпрд╛рдЪреЗ рдЕрдиреЗрдХ рдорд╛рд░реНрдЧ рдЖрд╣реЗрдд, рдкрд░рдВрддреБ рдореБрдЦреНрдп рдореБрджреНрджрд╛ рдЕрд╕рд╛ рдЖрд╣реЗ рдХреА рдЖрдкрд▓реНрдпрд╛рд▓рд╛ рд╡реНрд╣реЗрд░рд┐рдПрдмрд▓ рд╡реНрд╣реЕрд▓реНрдпреВрдЬ рдЖрдгрд┐ рдЕрдВрджрд╛рдЬ/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рдкреБрдвреАрд▓ рдкрд╛рдпрд░реА рдореНрд╣рдгрдЬреЗ рдЗрдВрдбрд┐рдХреЗрдЯрд░ рд╡реНрд╣реЗрд░рд┐рдПрдмрд▓ рдкрд╛рд╣рдгреЗ.
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", "john@google.com",
"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 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>рдирд┐рд╖реНрдХрд░реНрд╖
рдирд╡реАрди рд╕рдВрдХрд▓реНрдкрдирд╛ рдЕрд╕реЗ рдорд╛рдЭреЗ рд╡реИрдпрдХреНрддрд┐рдХ рдордд рдЖрд╣реЗ рд╡реНрдпрд╡рд╕реНрдерд┐рдд рдЦрд░реЛрдЦрд░ рдЕрдзрд┐рдХ рдЕрдВрддрд░реНрдЬреНрдЮрд╛рдиреА, рдЖрдгрд┐ рд▓реЗрдЧрд╕реА рдлрдВрдХреНрд╢рдиреНрд╕рдЪреНрдпрд╛ рдХрд╛рд░реНрдпрдХреНрд╖рдорддреЗрдордзреНрдпреЗ рд▓рдХреНрд╖рдгреАрдпрд░реАрддреНрдпрд╛ рдЙрддреНрдХреГрд╖реНрдЯ spread() ╨╕ gather(). рдорд▓рд╛ рдЖрд╢рд╛ рдЖрд╣реЗ рдХреА рдпрд╛ рд▓реЗрдЦрд╛рдиреЗ рддреБрдореНрд╣рд╛рд▓рд╛ рд╕рд╛рдореЛрд░реЗ рдЬрд╛рдгреНрдпрд╛рд╕ рдорджрдд рдХреЗрд▓реА рдЖрд╣реЗ pivot_longer() ╨╕ pivot_wider().
рд╕реНрддреНрд░реЛрдд: www.habr.com
