Are you looking for something like this? There are probably better ways to do this but I made it long and then wide again but not quite as wide.
library(tidyverse)
#> Warning: package 'tibble' was built under R version 4.1.2
#> Warning: package 'readr' was built under R version 4.1.2
Waves <- tibble::tribble(
~CaseID, ~AgeWave1, ~AgeWave2, ~AgeWave3, ~AgeWave4, ~YPI1, ~YPI2, ~YPI3, ~YPI4, ~HIF1, ~HIF2, ~HIF3, ~HIF4,
1L, 12L, 23L, 24L, 25L, 123L, 124L, 132L, 123L, 131L, 12321L, 112L, 221L,
2L, 13L, 23L, 24L, 26L, 123L, 124L, 132L, 123L, 131L, 12321L, 112L, 221L,
3L, 14L, 23L, 24L, 25L, 232L, 124L, 132L, 123L, 131L, 12321L, 112L, 221L,
4L, 12L, 23L, 24L, 26L, 123L, 124L, 132L, 123L, 131L, 12321L, 112L, 221L,
5L, 14L, 23L, 23L, 26L, 2L, 124L, 132L, 123L, 131L, 12321L, 112L, 221L,
6L, 13L, 23L, 24L, 25L, 123L, 124L, 132L, 123L, 131L, 12321L, 112L, 221L,
7L, 14L, 23L, 23L, 25L, 32L, 124L, 132L, 123L, 131L, 12321L, 112L, 221L,
8L, 14L, 23L, 23L, 25L, 123L, 124L, 132L, 123L, 131L, 12321L, 112L, 221L,
9L, 14L, 23L, 24L, 26L, 2L, 124L, 132L, 123L, 131L, 12321L, 112L, 221L,
10L, 13L, 23L, 23L, 25L, 123L, 124L, 132L, 123L, 131L, 12321L, 112L, 221L)
Waves%>%
pivot_longer(!CaseID) %>%
mutate(
name1=str_sub(name, 1, str_length(name)-1),
Wave=str_sub(name, str_length(name)),
) %>%
select(-name) %>%
pivot_wider( names_from="name1", values_from="value")
#> # A tibble: 40 x 5
#> CaseID Wave AgeWave YPI HIF
#> <int> <chr> <int> <int> <int>
#> 1 1 1 12 123 131
#> 2 1 2 23 124 12321
#> 3 1 3 24 132 112
#> 4 1 4 25 123 221
#> 5 2 1 13 123 131
#> 6 2 2 23 124 12321
#> 7 2 3 24 132 112
#> 8 2 4 26 123 221
#> 9 3 1 14 232 131
#> 10 3 2 23 124 12321
#> # ... with 30 more rows
Created on 2021-12-01 by the reprex package (v2.0.1)