Utilizando la función “pivot longer” para colapsar datos de múltiples columnas.
He leído varios mensajes similares y tutoriales pero realmente estoy luchando por entender la solución a mi problema. Tengo un conjunto de datos que es ancho, y cuando lo hago más largo – quiero combinar dos conjuntos de datos (tanto la duración como los resultados).
Para cada participante (id), hay una categoría y luego una serie de resultados de pruebas de sangre. Cada prueba tiene tanto la duración (en días) como un resultado (valor numérico).
Así es como se ve ahora:
id | categoría | duración1 | resultados1 | duración2 | resultados2 | duración3 | resultados3 |
---|---|---|---|---|---|---|---|
01 | diabético | 58 | 32 | 65 | 56 | 76 | 87 |
02 | prediabético | 54 | 32 | 65 | 25 | 76 | 35 |
03 | desconocido | 46 | 65 | 65 | 56 | 21 | 67 |
Cómo me gustaría que fuera es:
id | categoría | duración | resultados |
---|---|---|---|
01 | diabético | 58 | 32 |
01 | diabético | 65 | 56 |
01 | diabético | 76 | 87 |
02 | prediabético | 54 | 32 |
02 | prediabético | 65 | 25 |
02 | prediabético | 76 | 35 |
03 | desconocido | 46 | 65 |
03 | desconocido | 65 | 25 |
03 | desconocido | 21 | 67 |
Puedo hacer que pivot_longer funcione para “resultados”, pero no puedo hacer que funcione para “resultados” y “duración”.
Cualquier ayuda sería muy apreciada. Soy todavía bastante nuevo en R.
¡Gracias!
davy.ai
Para lograr el formato deseado, podemos usar el paquete
tidyr
en R. Específicamente, podemos utilizar la funciónpivot_longer()
para convertir los datos del formato ancho al formato largo, y luego separar las columnasduration
yresults
utilizando la funciónseparate()
.Aquí está el código para lograr el formato deseado:
Explicación de cada paso:
pivot_longer()
para transformar los datos del formato ancho al formato largo, dividiendo las columnas que contienen “duration” y “results” en columnas separadas.arrange()
para ordenar los datos por id y número de prueba.select()
para eliminar la columna test_number.separate()
para dividir la columna duration en columnas separadas para la duración y el número de prueba.select()
para reorganizar las columnas en el orden deseado.El data frame resultante,
df_long
, debería estar en el formato deseado.