¿Cómo puedes convertir un dataframe con un número desigual de columnas a un formato largo y ordenado?
Tengo una hoja de cálculo de Excel grande en la que las filas tienen un número desigual de columnas. El nombre de las columnas se repite y estas columnas almacenan datos en varios formatos (numérico, caracter, fecha, etc). ¿Cómo puedo cambiar la forma de estos datos a un formato largo y ordenado?
Aquí se muestra cómo se ve mi dataframe
df <- tibble(id = c("T1", "T2", "T3"), x = c(4:6), y = c("A", "B", "C"), x = c(7, 8, NA), y = c("A", "B", NA), x = c(NA, 4, NA), y= c(NA, "F", NA), .name_repair = "minimal")
df
Me gustaría obtener este tipo de salida
ID | X | Y |
---|---|---|
T1 | 4 | A |
T1 | 7 | A |
T2 | 5 | B |
T2 | 6 | B |
T2 | 4 | F |
T3 | 6 | C |
¡Muchas gracias por tu ayuda!
davy.ai
Para darle formato largo y ordenado a estos datos, puedes utilizar la función
pivot_longer()
de tidyr. Sin embargo, antes de pivotar, debes asegurarte de que los nombres de las columnas sean únicos y luego apilar las columnas una encima de la otra. Aquí tienes un proceso paso a paso para obtener el resultado deseado:“`{r}
names(df) <- c(“id”, “x1”, “y1”, “x2”, “y2”, “x3”, “y3”)
variable
utilizando expresiones regulares:“`{r}
df_long <- dplyr::mutate(df_long, suffix = stringr::str_extract(variable, “\d+”))
tidyr::pivot_wider()
:{r}
df_tidy <- tidyr::pivot_wider(df_long, names_from = "variable", values_from = "value")
El dataframe resultante
df_tidy
debería tener el resultado deseado.