You can use :
tidyr::pivot_longer(dat, cols = -id,
names_to = c('.value', 'brand'),
names_sep = "_")
# id brand Q1r1 Q1r2
# <chr> <chr> <dbl> <dbl>
#1 A pepsi 1 1
#2 A cola 0 0
#3 B pepsi 0 1
#4 B cola 0 1
#5 C pepsi 1 1
#6 C cola 1 1