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.

Uso de memoria de pivot_longer en un objeto pequeño.

Estoy trabajando en un dataframe que consiste en 528 columnas y 2.643.246 filas. Ocho de estas son variables de caracteres, y el resto son enteros. En total, esto suma hasta 11.35 GiB de datos, con mi RAM disponible siendo de 164 GiB.

Ahora quiero ejecutar un pivot_longer en dicho dataframe, con una fila para cada columna + dos variables ID (año e institución). En total, hay 671.370 instituciones en 76 años.
Entonces, actualmente los datos están estructurados de la siguiente manera:

Institución Año X Y Z
A 1 2 1 3
A 2 3 4 4
B 1 3 4 2
B 2 5 3 2

Donde me gustaría cambiarlo para que la estructura sea la siguiente:

Institución Año G N
A 1 X 2
A 1 Y 1
A 1 Z 3
A 2 X 3
A 2 Y 1
A 2 Z 4
B 1 X 3
B 1 Y 4
B 1 Z 2
B 2 X 5
B 2 Y 3
B 2 Z 2

Para lograr esto, intenté el siguiente código:

library (tidyverse)
Df <- Df%>% pivot_longer(17:527,
names_to = “G”,
values_to = “N”
)

Cuando lo ejecuto en una muestra de datos pequeña, logro obtener los resultados esperados, pero cuando intento hacer lo mismo en el conjunto de datos completo, rápidamente me quedo sin memoria. Del objeto que utiliza 11 GiB de memoria, rápidamente aumenta a más de 150 GiB antes de devolver un error de “no se puede asignar un vector de tamaño x Gb”.

Como no he agregado ningún dato, no puedo entender bien de dónde viene el aumento de memoria adicional. Mi pregunta es qué lo causa y si hay una forma más eficiente de resolver este problema a través de otro código.
¡Gracias de antemano por cualquier ayuda!

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Estoy teniendo problemas para ejecutar un pivot_longer en un dataframe que consta de 528 columnas y 2.643.246 filas. Ocho de ellas son variables de caracteres y el resto son enteros. En total, esto suma 11,35 GiB de datos, con mi RAM disponible en 164 GiB.

    Estoy intentando cambiar la estructura del dataframe de tal manera que se vea así:

    Institución Año G N
    A 1 X 2
    A 1 Y 1
    A 1 Z 3
    A 2 X 3
    A 2 Y 1
    A 2 Z 4
    B 1 X 3
    B 1 Y 4
    B 1 Z 2
    B 2 X 5
    B 2 Y 3
    B 2 Z 2

    Intenté usar el siguiente código:

    library(tidyverse)
    Df <- Df  %>% pivot_longer(17:527,
               names_to = "G",
               values_to = "N"
               )
    

    Cuando lo ejecuto con un conjunto de datos pequeño logro obtener los resultados esperados; sin embargo, cuando intento hacer lo mismo con todo el conjunto de datos, rápidamente me quedo sin memoria. Desde el objeto que usa 11 GiB de memoria, aumentó rápidamente a más de 150 GiB antes de devolver un error de “no se puede asignar el vector de tamaño x Gb”.

    Dado que no he añadido datos, no puedo entender del todo de dónde proviene el uso adicional de memoria. Por lo tanto, me pregunto qué provoca este aumento y si hay una forma más eficiente de resolver este problema a través de otro código.

    ¡Gracias de antemano por toda la ayuda!

Comments are closed.