¿Cómo puedo combinar varias columnas en una variable, adjuntando cada una al final de la otra y agrupando por los valores de una variable de ID?
Tengo un dataframe con múltiples columnas relacionadas con la misma variable, que me gustaría combinar en una sola columna. Sin embargo, la mayoría de las respuestas que encuentro aquí sobre este tema se refieren a la concatenación de columnas (por ejemplo, https://stackoverflow.com/questions/27906021/merge-2-columns-into-one-in-dataframe), mientras que yo quiero preservar cada celda individual de datos en mi dataframe, pero simplemente juntarlas en una sola columna.
Para mayor claridad, aquí hay una muestra de cómo se ve aproximadamente mi entrada de datos.
a | b | c | ID |
---|---|---|---|
string1 | string11 | string21 | 1111 |
string2 | string12 | string22 | 2222 |
Así es como me gustaría que se vean estos datos:
newvar | ID |
---|---|
string1 | 1111 |
string11 | 1111 |
string21 | 1111 |
string2 | 2222 |
string12 | 2222 |
string22 | 2222 |
Hasta ahora, he estado intentando usar “pivot_longer()” para lograr esto, de la siguiente manera:
pivot_longer(df, c("a", "b", "c"), "newvar")
Pero creo que debo malinterpretar el propósito de pivot_longer() porque el df que devuelve tiene celdas pobladas con los valores “a”, “b” y “c” en lugar de los valores de fila de esas columnas. También no estoy seguro de que pivot_longer tenga la capacidad de agrupar por columna de ID como deseo, excepto tal vez a través de piping. Cualquier ayuda es muy apreciada.
Edit: Me he dado cuenta de que mi problema al usar pivot_longer() parece ser que necesito especificar “values_to” como el argumento que responde a “newvar”.
pivot_longer(df, c("a", "b", "c"), values_to = "newvar")
Este código logra en su mayoría lo que necesito.
davy.ai
Para combinar varias columnas en una sola columna mientras se preservan los valores individuales de las celdas en un dataframe, puedes usar la función
pivot_longer()
del paquetetidyr
. Aquí está la sintaxis general:Esta función creará una nueva columna llamada “nueva_variable” y una nueva columna llamada “valor”, que contendrán los nombres de las columnas y los valores, respectivamente. El argumento
cols
especifica qué columnas quieres combinar, y el argumentonames_to
especifica el nombre de la nueva columna que contendrá los nombres originales de las columnas.Para agrupar los datos por la columna “ID”, puedes usar la función
group_by()
del paquetedplyr
antes de usarpivot_longer()
:Esto te dará la salida deseada como se muestra en la pregunta. Puedes asignar la salida a una nueva variable o sobrescribir el dataframe original para guardar los cambios.