I've got a dataframe with hundreds of columns, here's a simplified sample:
I need to arrange the order of specific columns so they are "kept together" based on the prefix in their column names, i.e. v_1, v_2, v_3 and spr_1, spr_2, spr_3 in the sample given. So the desired arrangement should look like this:

Due to the huge amount of columns in original data frame, it's necessary to select the columns by specifying the prefix (e.g. "spr_" ) instead of explicitly selecting each column (e.g. c(spr_1, spr_2, spr_3)). If necessary, an approach with tidyverse is great because I already use the library.
Sample data:
library(tidyverse)
df <- data.frame(
v_1 = c('A', 'B', 'C'),
xyz = c(1,2,3),
spr_1 = c('AA', 'BB', 'CC'),
spr_2 = c('DD', 'EE', 'FF'),
v_2 = c('D', 'E', 'F'),
quert = c('X', 'G', 'T'),
spr_3 = c('GG', 'HH', 'II'),
v_3 = c('G', 'H', 'I')
)
