es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Organice las columnas con información numérica en los nombres de las columnas a través de dplyr relocate.

Tengo una gran cantidad de datos anuales en un marco de datos que solo aumentará en tamaño. Me gustaría organizarlos, agrupando las columnas según el año, que está incluido en los nombres de las columnas.

Datos base:

dput(dat)
estructura(lista(id = 1:2, cantidad = 3:4, avg_2002 = 5:6, avg_2003 = 7:8,
avg_2020 = 9:10, rev_2002 = c(15L, 24L), rev_2003 = c(21L,
32L), rev_2020 = c(27L, 40L)), nombres.fila = c(NA, -2L), clase = “data.frame”)

Lo que me gustaría hacer es organizar todas las columnas con, digamos, “2002” en ellas juntas, seguidas de las columnas “2003” y así sucesivamente … Sé que relocate en dplyr es una buena manera de hacerlo, así que hice lo siguiente:

dat <- tibble(dat) dat <- dat %>%
relocate(grep(“2002$”, colnames(dat), value = TRUE),
.before = grep(“2003$”, colnames(dat), value = TRUE)) %>%
relocate(grep(“2003$”, colnames(dat), value = TRUE),
.after = grep(“2002$”, colnames(dat), value = TRUE))

lo que produce el resultado deseado para mi conjunto de datos de juguete:

 id cantidad avg_2002 rev_2002 avg_2003 rev_2003 avg_2020 rev_2020


1 1 3 5 15 7 21 9 27
2 2 4 6 24 8 32 10 40

Mi pregunta es la siguiente:

¿Cómo generalizo el código anterior para no tener que seguir agregando declaraciones de relocate hasta el aburrimiento?
¿Hay una mejor manera de realizar esta tarea sin usar dplyr :: relocate?

¡Cualquier sugerencia es muy apreciada. Gracias!

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Puedes utilizar un bucle para generalizar el código. Por ejemplo, puedes utilizar un bucle for para iterar a través de los años en los nombres de las columnas y utilizar dplyr::relocate para organizar las columnas de acuerdo al año.
    También puedes utilizar tidyr::pivot_longer para darle forma al marco de datos y organizar las columnas de acuerdo al año.

Comments are closed.