Crear múltiples gráficos basados en los nombres de las columnas

Esta es mi primera pregunta sobre stackoverlow, corríjame si no sigo los protocolos de preguntas correctas.

Estoy tratando de crear algunos gráficos para los datos que se han recopilado en tres puntos de tiempo (tiempo 1, tiempo 2, tiempo 3) que equivale a X1 ..., X2 ... y X3 ... al comienzo de la columna nombres Los gráficos también están separados por la columna $ Group del marco de datos.

No tengo problemas para crear los gráficos, solo tengo muchas variables (~ 170) y quiero comparar el tiempo 1 con el tiempo 2, el tiempo 2 con el tiempo 3, etc., así que estoy tratando de trabajar un atajo para ejecutar este tipo de código en lugar de tener que escribir cada uno individualmente.

Como se indicó anteriormente, he creado nombres de variables como X1 ... X2 ... que indican la hora en que se registró la variable, es decir, X1BCSTCAT = tiempo 1; X2BCSTCAT = tiempo 2; X3BCSTCAT = tiempo 3. Aquí hay una pequeña muestra de cómo se ven mis datos:

df <- structure(list(ID = structure(1:6, .Label = c("101","102","103","118","119","120"), class = "factor"), 
                   Group = structure(c(1L,1L,1L,2L,2L,2L), .Label = c("C8","TC"), class = "factor"), 
                   Wave = structure(c(1L, 2L, 3L, 4L, 1L, 2L), .Label = c("A","B","C","D"), class = "factor"), 
                   Yr = structure(c(1L, 2L, 1L, 2L, 1L, 2L), .Label = c("3","5"), class = c("ordered", "factor")), 
                   Age.Yr. = c(10.936,10.936, 9.311, 10.881, 10.683, 11.244), 
                   Training..hr. = c(10.667,10.333, 10.667, 10.333, 10.333, 10.333), 
                   X1BCSTCAT = c(-0.156,0.637,-1.133,0.637,2.189,1.229), 
                   X1BCSTCR = c(0.484,0.192, -1.309, 0.912, 1.902, 0.484), 
                   X1BCSTPR = c(-1.773,0.859, 0.859, 0.12, -1.111, 0.12), 
                   X2BCSTCAT = c(1.006, -0.379,-1.902, 0.444, 2.074, 1.006), 
                   X2BCSTCR = c(0.405, -0.457,-1.622, 1.368, 1.981, 0.168), 
                   X2BCSTPR = c(-0.511, -0.036,2.189, -0.036, -0.894, 0.949),
                   X3BCSTCAT = c(1.18, -1.399,-1.399, 1.18, 1.18, 1.18), 
                   X3BCSTCR = c(0.967, -1.622, -1.622,0.967, 0.967, 1.255), 
                   X3BCSTPR = c(-1.282, -1.282, 1.539,1.539, 0.792, 0.792)), 
              row.names = c(1L, 2L, 3L, 4L, 5L,8L), class = "data.frame")

Aquí hay un código de trabajo para crear un gráfico usando ggplot para datos de tiempo 1 vs tiempo 2 en una variable:

library(ggplot2)

p <- ggplot(df, aes(x=df$X1BCSTCAT, y=df$X2BCSTCAT, shape = df$Group, color = df$Group)) + 
  geom_point() + geom_smooth(method=lm, aes(fill=df$Group), fullrange = TRUE) + 
  labs(title="BCSTCAT", x="Time 1", y = "Time 2") + 
  scale_color_manual(name = "Group",labels = c("C8","TC"),values = c("blue", "red")) +
  scale_shape_manual(name = "Group",labels = c("C8","TC"),value,s = c(16, 17)) +
  scale_fill_manual(name = "Group",labels = c("C8", "TC"),values = c("light blue", "pink"))

Así que realmente estoy tratando de crear algún tipo de atajo en el que R se desplazará y combinará los nombres de las variables X1 ... vs X2 ... y así sucesivamente y crearé los gráficos. Supongo que debe haber alguna forma de trazar en función de los números de columna coincidentes, p. df [, 7] vs df [, 10] e iterando a través de este proceso o trazando, haciendo coincidir los nombres (donde la única diferencia en los nombres de variables es el número que indica el tiempo).

He pasado por ciclos creando gráficos individuales usando lalapply función, pero no tengo idea de por dónde empezar tratando de hacer esto.

Respuestas a la pregunta(1)

Su respuesta a la pregunta