A little hacky but it can work as a starting point for you to refine
library(tidyverse)
#Sample data in a copy/paste friendly format
df <- data.frame(
stringsAsFactors = FALSE,
Nombre = c("John", "Maria", "Selena", "Leonardo", "Brad"),
Equipo = c("Amarillo", "Amarillo", "Amarillo", "Azul", "Azul"),
fecha_1_365 = c(6, 7.7, 6.7, NA, 6),
fecha_2_365 = c(6.5, NA, 6.3, 8.3, 7.4),
fecha_3_365 = c(6.6, NA, NA, NA, NA),
fecha_1_sofa = c(6.1, 7.3, 7.1, NA, 6.3),
fecha_2_sofa = c(6.9, NA, 6.5, 9.3, 7.3),
fecha_3_sofa = c(6.6, NA, NA, NA, NA),
fecha_1_who = c(5.77, 6.99, 6.82, NA, 6.06),
fecha_2_who = c(6.43, NA, 6.23, 8.78, 7.16),
fecha_3_who = c(6.19, NA, NA, NA, NA),
fecha_1_prom = c(5.96, 7.33, 6.87, NA, 6.12),
fecha_2_prom = c(6.61, NA, 6.34, 8.79, 7.29),
fecha_3_prom = c(6.46, NA, NA, NA, NA)
)
names <- data.frame(names = names(df[-c(1,2)])) %>%
separate(names, into = c("date", "var"), sep = "(?<=fecha_\\d)") %>%
mutate(var = factor(var, levels = c('_365', '_sofa', '_who', '_prom'))) %>%
arrange(date, var) %>%
transmute(names = paste0(date, var)) %>%
pull(names)
df %>%
select(Nombre, Equipo, all_of(names))
#> Nombre Equipo fecha_1_365 fecha_1_sofa fecha_1_who fecha_1_prom
#> 1 John Amarillo 6.0 6.1 5.77 5.96
#> 2 Maria Amarillo 7.7 7.3 6.99 7.33
#> 3 Selena Amarillo 6.7 7.1 6.82 6.87
#> 4 Leonardo Azul NA NA NA NA
#> 5 Brad Azul 6.0 6.3 6.06 6.12
#> fecha_2_365 fecha_2_sofa fecha_2_who fecha_2_prom fecha_3_365 fecha_3_sofa
#> 1 6.5 6.9 6.43 6.61 6.6 6.6
#> 2 NA NA NA NA NA NA
#> 3 6.3 6.5 6.23 6.34 NA NA
#> 4 8.3 9.3 8.78 8.79 NA NA
#> 5 7.4 7.3 7.16 7.29 NA NA
#> fecha_3_who fecha_3_prom
#> 1 6.19 6.46
#> 2 NA NA
#> 3 NA NA
#> 4 NA NA
#> 5 NA NA
Created on 2022-06-17 by the reprex package (v2.0.1)