Conversión de un marco de datos de formato "ancho" a formato "largo" en R

Tengo el siguiente marco de datos:

 df = data.frame(A_1 = c(1,2,3), A_2 = c(4,5,6), A_3 = c(7,8,9), B_1 = c(10, 11, 12), B_2 = c(13, 14, 15), B_3 = c(16, 17, 18))

 #> df
 #  A_1 A_2 A_3 B_1 B_2 B_3
 #1   1   4   7  10  13  16
 #2   2   5   8  11  14  17
 #3   3   6   9  12  15  18

Los nombres de las columnas contienen una letra y un número. La letra se refiere a una variable específica (por ejemplo, A es un factor, B es un factor), mientras que los números en los nombres de columna se refieren a individuos. En otras palabras, cada individuo tiene valores para A y B: A_1 y B_1 son columnas paraIndividual 1, y A_2, B_2 son columnas paraIndividuo 2, etc.

Me gustaría lograr el siguiente resultado: tenga en cuenta que todas las columnas "A" se fusionan en una columna "A", y lo mismo ocurre con las columnas "B", etc.

   A  B
 # 1 10
 # 2 11
 # 3 12
 # 4 13
 # 5 14
 # 6 15
 # 7 16
 # 8 17
 # 9 18

¿Hay alguna manera fácil de lograr eso? Tenga en cuenta que mi marco de datos real contiene más de 20 columnas de letras distintas (A, B, C, ...), cada una de las cuales tiene tres subcolumnas (por ejemplo: A_1, A_2, A_3).

¡¡Gracias!!

Respuestas a la pregunta(3)

Su respuesta a la pregunta