The alternative would be to directly create the spec resp. modify it. With the spec one can also easily see that the column names person_x are not really correct and should be choice_x
skittles_raw <- tibble::tribble(
~skittle_type, ~person_a, ~order_a, ~person_b, ~order_b, ~person_c, ~order_c,
1, "purple", 4, "red", 9, "purple", 6,
1, "red", 10, "green", 10, "red", 10,
2, "yellow", 2, "orange", 4, "orange", 1,
2, "orange", 5, "orange", 8, "green", 9,
3, "orange", 3, "orange", 2, "orange", 2,
3, "red", 7, "yellow", 7, "yellow", 5,
4, "purple", 8, "green", 1, "red", 3,
4, "yellow", 9, "red", 3, "yellow", 4,
5, "purple", 1, "purple", 5, "purple", 7,
5, "green", 6, "purple", 6, "purple", 8
)
library(tidyr)
library(dplyr)
#>
#> Attaching package: 'dplyr'
#> The following objects are masked from 'package:stats':
#>
#> filter, lag
#> The following objects are masked from 'package:base':
#>
#> intersect, setdiff, setequal, union
spec <- tribble(
~ .name, ~ .value, ~ person,
"person_a", "choice", "a",
"order_a", "order", "a",
"person_b", "choice", "b",
"order_b", "order", "b",
"person_c", "choice", "c",
"order_c", "order", "c"
)
skittles_raw %>%
pivot_longer_spec(spec, names_repair = "unique")
#> # A tibble: 30 x 4
#> skittle_type person choice order
#> <dbl> <chr> <chr> <dbl>
#> 1 1 a purple 4
#> 2 1 b red 9
#> 3 1 c purple 6
#> 4 1 a red 10
#> 5 1 b green 10
#> 6 1 c red 10
#> 7 2 a yellow 2
#> 8 2 b orange 4
#> 9 2 c orange 1
#> 10 2 a orange 5
#> # … with 20 more rows
Created on 2020-07-22 by the reprex package (v0.3.0)