R package tidyr ื•ื”ืคื•ื ืงืฆื™ื•ืช ื”ื—ื“ืฉื•ืช ืฉืœื” pivot_longer ื•- pivot_wider

ื—ื‘ื™ืœื” ืžืกื•ื“ืจ ื ื›ืœืœ ื‘ืœื™ื‘ื” ืฉืœ ืื—ืช ื”ืกืคืจื™ื•ืช ื”ืคื•ืคื•ืœืจื™ื•ืช ื‘ื™ื•ืชืจ ื‘ืฉืคืช R - ืžืกื•ื“ืจ.
ื”ืžื˜ืจื” ื”ืขื™ืงืจื™ืช ืฉืœ ื”ื—ื‘ื™ืœื” ื”ื™ื ืœื”ื‘ื™ื ืืช ื”ื ืชื•ื ื™ื ืœืฆื•ืจื” ืžื“ื•ื™ืงืช.

ื›ื‘ืจ ื–ืžื™ืŸ ื‘-Habrรฉ ืคืจืกื•ื ืžื•ืงื“ืฉ ืœื—ื‘ื™ืœื” ื–ื•, ืืš ื”ื™ื ืžืชื•ืืจื›ืช ืœ-2015. ื•ืื ื™ ืจื•ืฆื” ืœืกืคืจ ืœื›ื ืขืœ ื”ืฉื™ื ื•ื™ื™ื ื”ืขื“ื›ื ื™ื™ื ื‘ื™ื•ืชืจ, ืฉื”ื•ื›ืจื–ื• ืœืคื ื™ ืžืกืคืจ ื™ืžื™ื ืขืœ ื™ื“ื™ ืžื—ื‘ืจื•, ื”ื“ืœื™ ื•ื•ื™ืงื”ืื.

R package tidyr ื•ื”ืคื•ื ืงืฆื™ื•ืช ื”ื—ื“ืฉื•ืช ืฉืœื” pivot_longer ื•- pivot_wider

SJK: ื”ืื ื”-collect() ื•- spread() ื™ื‘ื•ื˜ืœื•?

ื”ื“ืœื™ ื•ื•ื™ืงื”ืื: ื‘ืžื™ื“ื” ืžืกื•ื™ืžืช. ืœื ื ืžืœื™ืฅ ืขื•ื“ ืขืœ ื”ืฉื™ืžื•ืฉ ื‘ืคื•ื ืงืฆื™ื•ืช ื”ืœืœื• ื•ื ืชืงืŸ ื‘ื”ืŸ ื‘ืื’ื™ื, ืืš ื”ืŸ ื™ืžืฉื™ื›ื• ืœื”ื™ื•ืช ื ื•ื›ื—ื•ืช ื‘ื—ื‘ื™ืœื” ื‘ืžืฆื‘ืŸ ื”ื ื•ื›ื—ื™.

ืชื•ื›ืŸ

ืื ืืชื” ืžืขื•ื ื™ื™ืŸ ื‘ื ื™ืชื•ื— ื ืชื•ื ื™ื, ืื•ืœื™ ืืชื” ืžืขื•ื ื™ื™ืŸ ื‘- ืฉืœื™ ืžื‘ืจืง ะธ YouTube ืขืจื•ืฆื™ื. ืจื•ื‘ ื”ืชื•ื›ืŸ ืžื•ืงื“ืฉ ืœืฉืคืช R.

ืงื•ื ืกืคื˜ TidyData

ื™ืขื“ ืžืกื•ื“ืจ - ืœืขื–ื•ืจ ืœืš ืœื”ื‘ื™ื ืืช ื”ื ืชื•ื ื™ื ืœืฆื•ืจื” ืžืกื•ื“ืจืช ื›ื‘ื™ื›ื•ืœ. ื ืชื•ื ื™ื ืžืกื•ื“ืจื™ื ื”ื ื ืชื•ื ื™ื ืฉื‘ื”ื:

  • ื›ืœ ืžืฉืชื ื” ื ืžืฆื ื‘ืขืžื•ื“ื”.
  • ื›ืœ ืชืฆืคื™ืช ื”ื™ื ืžื—ืจื•ื–ืช.
  • ื›ืœ ืขืจืš ื”ื•ื ืชื.

ื”ืจื‘ื” ื™ื•ืชืจ ืงืœ ื•ื ื•ื— ืœืขื‘ื•ื“ ืขื ื ืชื•ื ื™ื ืฉืžื•ืฆื’ื™ื ื‘ื ืชื•ื ื™ื ืžืกื•ื“ืจื™ื ื‘ืขืช ื‘ื™ืฆื•ืข ื ื™ืชื•ื—.

ืคื•ื ืงืฆื™ื•ืช ืขื™ืงืจื™ื•ืช ื”ื›ืœื•ืœื•ืช ื‘ื—ื‘ื™ืœืช 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")

ื‘ื–ืžืŸ ื›ืชื™ื‘ืช ืฉื•ืจื•ืช ืืœื”, ืคื•ื ืงืฆื™ื•ืช ืืœื• ื–ืžื™ื ื•ืช ืจืง ื‘ื’ืจืกืช ื”-dev ืฉืœ ื”ื—ื‘ื™ืœื” ื‘-GitHub.

ืžืขื‘ืจ ืœืชื›ื•ื ื•ืช ื—ื“ืฉื•ืช

ืœืžืขืฉื”, ืœื ืงืฉื” ืœื”ืขื‘ื™ืจ ืกืงืจื™ืคื˜ื™ื ื™ืฉื ื™ื ืœืขื‘ื•ื“ื” ืขื ืคื•ื ืงืฆื™ื•ืช ื—ื“ืฉื•ืช; ืœื”ื‘ื ื” ื˜ื•ื‘ื” ื™ื•ืชืจ, ืืงื— ื“ื•ื’ืžื” ืžื”ืชื™ืขื•ื“ ืฉืœ ืคื•ื ืงืฆื™ื•ืช ื™ืฉื ื•ืช ื•ืืจืื” ื›ื™ืฆื“ ืื•ืชืŸ ืคืขื•ืœื•ืช ืžืชื‘ืฆืขื•ืช ื‘ืืžืฆืขื•ืช ื—ื“ืฉื•ืช pivot_*() ืคื•ื ืงืฆื™ื•ืช.

ื”ืžืจืช ืคื•ืจืžื˜ ืจื—ื‘ ืœืคื•ืจืžื˜ ืืจื•ืš.

ืงื•ื“ ืœื“ื•ื’ืžื” ืžืชื•ืš ืชื™ืขื•ื“ ืคื•ื ืงืฆื™ื™ืช ื”-collect

# 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 ืฉืžื•ืชื™ื”ื ื—ื™ื™ื‘ื™ื ืœื”ื™ื•ืช ื‘ืžืจื›ืื•ืช.

ื˜ื‘ืœื” ืฉืชืขื–ื•ืจ ืœื›ื ืœื”ื‘ื™ืŸ ื‘ืฆื•ืจื” ื”ื›ื™ ืงืœื” ืื™ืš ืœืขื‘ื•ืจ ืœืขื‘ื•ื“ ืขื ืงื•ื ืกืคื˜ ื—ื“ืฉ ืžืกื•ื“ืจ.

R package tidyr ื•ื”ืคื•ื ืงืฆื™ื•ืช ื”ื—ื“ืฉื•ืช ืฉืœื” pivot_longer ื•- pivot_wider

ื”ืขืจื” ืžื”ืžื—ื‘ืจ

ื›ืœ ื”ื˜ืงืกื˜ ืœืžื˜ื” ื”ื•ื ืื“ืคื˜ื™ื‘ื™, ื”ื™ื™ืชื™ ืื•ืžืจ ืืคื™ืœื• ืชืจื’ื•ื ื—ื•ืคืฉื™ ื•ื™ื ื™ื™ื˜ื•ืช ืžื”ืืชืจ ื”ืจืฉืžื™ ืฉืœ ืกืคืจื™ื™ืช tidyverse.

ื“ื•ื’ืžื” ืคืฉื•ื˜ื” ืœื”ืžืจืช ื ืชื•ื ื™ื ืžืคื•ืจืžื˜ ืจื—ื‘ ืœืืจื•ืš

pivot_longer () โ€” ืžืืจื™ืš ืืช ืžืขืจื›ื™ ื”ื ืชื•ื ื™ื ืขืœ ื™ื“ื™ ื”ืคื—ืชืช ืžืกืคืจ ื”ืขืžื•ื“ื•ืช ื•ื”ื’ื“ืœืช ืžืกืคืจ ื”ืฉื•ืจื•ืช.

R package tidyr ื•ื”ืคื•ื ืงืฆื™ื•ืช ื”ื—ื“ืฉื•ืช ืฉืœื” pivot_longer ื•- pivot_wider

ื›ื“ื™ ืœื”ืคืขื™ืœ ืืช ื”ื“ื•ื’ืžืื•ืช ื”ืžื•ืฆื’ื•ืช ื‘ืžืืžืจ, ืชื—ื™ืœื” ืขืœื™ืš ืœื—ื‘ืจ ืืช ื”ื—ื‘ื™ืœื•ืช ื”ื“ืจื•ืฉื•ืช:

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

ื ื ื™ื— ืฉื™ืฉ ืœื ื• ื˜ื‘ืœื” ืขื ืชื•ืฆืื•ืช ืกืงืจ ืฉืฉืืœ (ื‘ื™ืŸ ื”ื™ืชืจ) ืื ืฉื™ื ืœื’ื‘ื™ ื“ืชื ื•ื”ื›ื ืกืชื ื”ืฉื ืชื™ืช:

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

ื˜ื‘ืœื” ื–ื• ืžื›ื™ืœื” ืืช ื ืชื•ื ื™ ื”ื“ืช ืฉืœ ื”ืžืฉื™ื‘ื™ื ื‘ืฉื•ืจื•ืช, ื•ืจืžื•ืช ื”ื”ื›ื ืกื” ืžืคื•ื–ืจื•ืช ืขืœ ืคื ื™ ืฉืžื•ืช ื”ืขืžื•ื“ื•ืช. ืžืกืคืจ ื”ืžืฉื™ื‘ื™ื ืžื›ืœ ืงื˜ื’ื•ืจื™ื” ืžืื•ื—ืกืŸ ื‘ืขืจื›ื™ ื”ืชื ื‘ืฆื•ืžืช ื“ืช ื•ืจืžืช ื”ื›ื ืกื”. ื›ื“ื™ ืœื”ื‘ื™ื ืืช ื”ื˜ื‘ืœื” ืœืคื•ืจืžื˜ ืžืกื•ื“ืจ ื•ื ื›ื•ืŸ, ื–ื” ืžืกืคื™ืง ืœื”ืฉืชืžืฉ pivot_longer():

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

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

ื˜ื™ืขื•ื ื™ ืคื•ื ืงืฆื™ื” pivot_longer()

  • ื˜ื™ืขื•ืŸ ืจืืฉื•ืŸ ืฆื•ื•ืืจื•ื ื™ื, ืžืชืืจ ืื™ืœื• ืขืžื•ื“ื•ืช ื™ืฉ ืœืžื–ื’. ื‘ืžืงืจื” ื–ื”, ื›ืœ ื”ืขืžื•ื“ื•ืช ืžืœื‘ื“ ื–ืžืŸ.
  • ื˜ื™ืขื•ืŸ ืฉืžื•ืช_ืœ ื ื•ืชืŸ ืืช ืฉื ื”ืžืฉืชื ื” ืฉื™ื™ื•ื•ืฆืจ ืžืฉืžื•ืช ื”ืขืžื•ื“ื•ืช ืฉืฉืจืฉืจื ื•.
  • values_to ื ื•ืชืŸ ืฉื ืฉืœ ืžืฉืชื ื” ืฉื™ื™ื•ื•ืฆืจ ืžื”ื ืชื•ื ื™ื ื”ืžืื•ื—ืกื ื™ื ื‘ืขืจื›ื™ ื”ืชืื™ื ืฉืœ ื”ืขืžื•ื“ื•ืช ื”ืžืžื•ื–ื’ื•ืช.

ืžืคืจื˜ื™ื

ื–ื•ื”ื™ ืคื•ื ืงืฆื™ื•ื ืœื™ื•ืช ื—ื“ืฉื” ืฉืœ ื”ื—ื‘ื™ืœื” ืžืกื•ื“ืจ, ืฉืœื ื”ื™ื” ื–ืžื™ืŸ ื‘ืขื‘ืจ ื‘ืขืช ืขื‘ื•ื“ื” ืขื ืคื•ื ืงืฆื™ื•ืช ืžื“ื•ืจ ืงื•ื“ื.

ืžืคืจื˜ ื”ื•ื ืžืกื’ืจืช ื ืชื•ื ื™ื, ืฉื›ืœ ืฉื•ืจื” ืฉืœื” ืžืชืื™ืžื” ืœืขืžื•ื“ื” ืื—ืช ื‘ืžืกื’ืจืช ืชืืจื™ืš ื”ืคืœื˜ ื”ื—ื“ืฉื”, ื•ืฉืชื™ ืขืžื•ื“ื•ืช ืžื™ื•ื—ื“ื•ืช ืฉืžืชื—ื™ืœื•ืช ื‘:

  • . ืฉื ืžื›ื™ืœ ืืช ืฉื ื”ืขืžื•ื“ื” ื”ืžืงื•ืจื™.
  • .value ืžื›ื™ืœ ืืช ืฉื ื”ืขืžื•ื“ื” ืฉืชื›ื™ืœ ืืช ืขืจื›ื™ ื”ืชื.

ื”ืขืžื•ื“ื•ืช ื”ื ื•ืชืจื•ืช ืฉืœ ื”ืžืคืจื˜ ืžืฉืงืคื•ืช ื›ื™ืฆื“ ื”ืขืžื•ื“ื” ื”ื—ื“ืฉื” ืชืฆื™ื’ ืืช ืฉื ื”ืขืžื•ื“ื•ืช ื”ื“ื—ื•ืกื•ืช . ืฉื.

ื”ืžืคืจื˜ ืžืชืืจ ืืช ื”ืžื˜ื ื ืชื•ื ื™ื ื”ืžืื•ื—ืกื ื™ื ื‘ืฉื ืขืžื•ื“ื”, ืขื ืฉื•ืจื” ืื—ืช ืœื›ืœ ืขืžื•ื“ื” ื•ืขืžื•ื“ื” ืื—ืช ืœื›ืœ ืžืฉืชื ื”, ื‘ืฉื™ืœื•ื‘ ืขื ืฉื ื”ืขืžื•ื“ื”, ื”ื’ื“ืจื” ื–ื• ืขืฉื•ื™ื” ืœื”ื™ืจืื•ืช ืžื‘ืœื‘ืœืช ื›ืจื’ืข, ืืš ืœืื—ืจ ืฉืชืกืชื›ืœ ืขืœ ื›ืžื” ื“ื•ื’ืžืื•ืช ื”ื™ื ืชื”ืคื•ืš ืœื”ืจื‘ื” ื™ื•ืชืจ ื‘ืจื•ืจ.

ื”ืคื•ืื ื˜ื” ืฉืœ โ€‹โ€‹ื”ืžืคืจื˜ ื”ื™ื ืฉืืชื” ื™ื›ื•ืœ ืœืื—ื–ืจ, ืœืฉื ื•ืช ื•ืœื”ื’ื“ื™ืจ ืžื˜ื ื ืชื•ื ื™ื ื—ื“ืฉื™ื ืขื‘ื•ืจ ืžืกื’ืจืช ื”ื ืชื•ื ื™ื ื”ืžื•ืžืจืช.

ื›ื“ื™ ืœืขื‘ื•ื“ ืขื ืžืคืจื˜ื™ื ื‘ืขืช ื”ืžืจืช ื˜ื‘ืœื” ืžืคื•ืจืžื˜ ืจื—ื‘ ืœืคื•ืจืžื˜ ืืจื•ืš, ื”ืฉืชืžืฉ ื‘ืคื•ื ืงืฆื™ื” pivot_longer_spec().

ืื™ืš ื”ืคื•ื ืงืฆื™ื” ื”ื–ื• ืขื•ื‘ื“ืช ื”ื™ื ืฉื”ื™ื ืœื•ืงื—ืช ื›ืœ ืžืกื’ืจืช ืชืืจื™ืš ื•ืžื™ื™ืฆืจืช ืืช ื”ืžื˜ื ื ืชื•ื ื™ื ืฉืœื” ื‘ืื•ืคืŸ ืฉืชื•ืืจ ืœืขื™ืœ.

ื›ื“ื•ื’ืžื”, ื ื™ืงื— ืืช ืžืขืจืš ื”ื ืชื•ื ื™ื who ืฉืกื•ืคืง ืขื ื”ื—ื‘ื™ืœื” ืžืกื•ื“ืจ. ืžืขืจืš ื ืชื•ื ื™ื ื–ื” ืžื›ื™ืœ ืžื™ื“ืข ืฉืกื•ืคืง ืขืœ ื™ื“ื™ ืืจื’ื•ืŸ ื”ื‘ืจื™ืื•ืช ื”ื‘ื™ื ืœืื•ืžื™ ืขืœ ืฉื›ื™ื—ื•ืช ืฉื—ืคืช.

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

ื›ืœ ืžื” ืฉืขืฉื™ื ื• ื–ื” ืขืชื” ื™ื›ื•ืœ ืœื”ื™ื•ืช ืžืชื•ืืจ ื‘ืื•ืคืŸ ืกื›ืžื˜ื™ ื‘ืื•ืคืŸ ื”ื‘ื:

R package tidyr ื•ื”ืคื•ื ืงืฆื™ื•ืช ื”ื—ื“ืฉื•ืช ืฉืœื” pivot_longer ื•- pivot_wider

ืžืคืจื˜ ื‘ืืžืฆืขื•ืช ืขืจื›ื™ื ืžืจื•ื‘ื™ื (.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")) - ืœืคืฆืœ ืืช ื”ืขืžื•ื“ื” . ืฉื, ื”ืžื›ื™ืœ ืืช ืฉืžื•ืช ืฉื“ื•ืช ื”ืžืงื•ืจ, ืชื•ืš ืฉื™ืžื•ืฉ ื‘ืงื• ื”ืชื—ืชื•ืŸ ื•ื”ื–ื ืช ื”ืขืจื›ื™ื ื”ืžืชืงื‘ืœื™ื ืœืขืžื•ื“ื•ืช .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() - ื”ื•ื ื”ื˜ืจื ืกืคื•ืจืžืฆื™ื” ื”ื”ืคื•ื›ื”, ื•ืœื”ื™ืคืš ืžื’ื“ื™ืœ ืืช ืžืกืคืจ ื”ืขืžื•ื“ื•ืช ืฉืœ ืžืกื’ืจืช ื”ืชืืจื™ืš ืขืœ ื™ื“ื™ ื”ืคื—ืชืช ืžืกืคืจ ื”ืฉื•ืจื•ืช.

R package tidyr ื•ื”ืคื•ื ืงืฆื™ื•ืช ื”ื—ื“ืฉื•ืช ืฉืœื” pivot_longer ื•- pivot_wider

ืกื•ื’ ื–ื” ืฉืœ ื˜ืจื ืกืคื•ืจืžืฆื™ื” ืžืฉืžืฉ ืœืขืชื™ื ื ื“ื™ืจื•ืช ื‘ื™ื•ืชืจ ื›ื“ื™ ืœื”ื‘ื™ื ื ืชื•ื ื™ื ืœืฆื•ืจื” ืžื“ื•ื™ืงืช, ืขื ื–ืืช, ื˜ื›ื ื™ืงื” ื–ื• ื™ื›ื•ืœื” ืœื”ื™ื•ืช ืฉื™ืžื•ืฉื™ืช ืœื™ืฆื™ืจืช ื˜ื‘ืœืื•ืช ืฆื™ืจ ื”ืžืฉืžืฉื•ืช ื‘ืžืฆื’ื•ืช, ืื• ืœืฉื™ืœื•ื‘ ืขื ื›ืœื™ื ืื—ืจื™ื.

ื‘ืขืฆื ื”ืคื•ื ืงืฆื™ื•ืช pivot_longer() ะธ pivot_wider() ื”ื ืกื™ืžื˜ืจื™ื™ื, ื•ืžื™ื™ืฆืจื™ื ืคืขื•ืœื•ืช ื”ืคื•ื›ื•ืช ื–ื• ืœื–ื•, ื›ืœื•ืžืจ: df %>% pivot_longer(spec = spec) %>% pivot_wider(spec = spec) ะธ df %>% pivot_wider(spec = spec) %>% pivot_longer(spec = spec) ื™ื—ื–ื™ืจ ืืช ื”-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(): ื”ืขืžื•ื“ื•ืช ืฉืฆื•ื™ื ื• ื‘ . ืฉื, ื‘ืืžืฆืขื•ืช ืขืจื›ื™ื ืž .value ื•ืขืžื•ื“ื•ืช ืื—ืจื•ืช.

ืขื‘ื•ืจ ืžืขืจืš ื”ื ืชื•ื ื™ื ื”ื–ื”, ืืชื” ื™ื›ื•ืœ ืœื™ืฆื•ืจ ืžืคืจื˜ ืžื•ืชืื ืื™ืฉื™ืช ืื ืืชื” ืจื•ืฆื” ืฉืœื›ืœ ืžื“ื™ื ื” ื•ืฉื™ืœื•ื‘ ืžื•ืฆืจ ืืคืฉืจื™ ืชื”ื™ื” ืขืžื•ื“ื” ืžืฉืœื•, ืœื ืจืง ืืœื” ื”ืงื™ื™ืžื™ื ื‘ื ืชื•ื ื™ื:

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 (ืขืจื›ืช ื ืชื•ื ื™ื ื–ืžื™ื ื” ื‘ื—ื‘ื™ืœื” ืžืคืงื“ ื”ืื•ื›ืœื•ืกื™ืŸ).

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, ืื™ืš, ื”ื›ื ืกื”_ืžื•. ื™ืฉื ืŸ ื“ืจื›ื™ื ืจื‘ื•ืช ืœื™ืฆื•ืจ ืžืคืจื˜ ื–ื”, ืืš ื”ื ืงื•ื“ื” ื”ืขื™ืงืจื™ืช ื”ื™ื ืฉืขืœื™ื ื• ืœื™ืฆื•ืจ ื›ืœ ืฉื™ืœื•ื‘ ืฉืœ ืขืจื›ื™ื ืžืฉืชื ื™ื ื• ืื•ืžื“ืŸ/ืžื•ื•ืœืื—ืจ ืžื›ืŸ ืฆื•ืจ ืืช ืฉื ื”ืขืžื•ื“ื”.

  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

ื”ื•ืกืคืช ืชื’ื•ื‘ื”