La mejor manera de simplemente almacenar datos para el análisis estadístico en R [cerrado]

12

He estado usando archivos de texto para almacenar mis datos para R sin ningún problema desde hace algún tiempo. Pero para un proyecto reciente, los tamaños de los archivos se están volviendo demasiado grandes para que los manejen los archivos de texto sin procesar. ¿Cuál es la mejor alternativa simple?

Toy Molto
fuente
55
¿De qué manera los archivos de texto se están volviendo demasiado grandes? ¿Tienes miedo por su integridad? ¿No puede abrirlos en algún otro software? ¿Son demasiado lentos para cargar? ¿Demasiado grande para tu disco duro (portátil?)?
Gala
3
+1 La gestión de datos a medida que los proyectos crecen es un problema universal en el análisis de datos (y no es específicamente específico R). La preocupación fundamental es la integridad de los datos en lugar del tamaño del archivo: proponer alguna forma de compresión simplemente oscurece esto en lugar de resolverlo.
Whuber
Por encima de cierto tamaño, txt simplemente no parece funcionar. Puedo agregar los datos adicionales al archivo txt y cargarlos en R, pero los datos adicionales no están en R. (Por cierto, los datos son bastante ricos, así que aunque la compresión puede ayudar un poco, no me llevaría tan lejos y yo sospechoso a medida que mi proyecto crezca, terminaré con los mismos problemas nuevamente.)
Toy Molto
Debe contarnos más acerca de sus datos, no existe tal cosa como "la mejor manera de obtener ningún tipo de datos".
zx8754
¿Quieres decir eso read.tableo read.csvfallas en silencio? ¿Estás absolutamente seguro de que no tienes varios archivos y algún error de codificación (ruta incorrecta, nombre de archivo incorrecto, etc.)? Solo para arreglar ideas, es posible que también desee darnos una idea de cuántas variables y cuántos registros está tratando aproximadamente.
Gala

Respuestas:

10

El enfoque estándar de R es usar savey load. Si ejecuta savesu marco de datos después de importarlo y anotarlo, puede especificar compress=TRUEy se sorprenderá de la compresión y el loadtiempo rápido . Esto funciona especialmente bien si el tamaño del objeto es inferior a aproximadamente 400 MB. De lo contrario, consulte algunas de las sugerencias anteriores o el poderoso ffpaquete en R.

El Hmiscpaquete tiene pequeños envoltorios Savey Loadpara hacer lo anterior aún más indoloro:

mydata <- csv.get(...)  # Hmisc package, has several options
Save(mydata)   # writes mydata.rda to current working directory
....
Load(mydata)   # reads mydata.rda and creates mydata data frame
Frank Harrell
fuente
9

Echa un vistazo a las bases de datos SQLite3. Cada base de datos es un archivo, por lo que no requiere configurar un servidor de base de datos.

Para crear una base de datos:

$ sqlite3 my_db.db3
> CREATE TABLE my_table ( col1 TEXT );

Para usar con R, https://gist.github.com/lynaghk/1062939

momeara
fuente
+1 El uso de una base de datos real es un gran paso en la dirección correcta.
whuber
¿Sería esta la herramienta adecuada? cran.r-project.org/web/packages/RSQLite/index.html
EngrStudent - Reinstale a Monica el
Gracias, intentaré esta ruta. También miré MySQL, pero parece ser más de lo que necesito.
Toy Molto
4

Hay varias opciones genéricas.

  • Podrías comprimir el texto.
  • Podría ir binario en el texto, no escribir en ascii

La gran compresión depende de los datos.

Mi suposición (y no especificó, así que debo adivinar) es que está buscando almacenar datos similares a una hoja de cálculo en algo distinto de csv (delimitado por comas).

Uno de mis formatos favoritos (me encanta MatLab) es hdf.

Aquí hay información relacionada con R sobre HDF:

Es un formato de almacenamiento de datos de supercomputación de alta densidad. Puede ser muy rápido y eficiente. También es (como era de esperar) más denso que el texto comprimido.

EngrStudent - Restablece a Monica
fuente
3

Las funciones estándar de lectura de archivos en R ahora leerán automáticamente archivos comprimidos de manera automática. Entonces, simplemente ejecute una compresión gzip simple en sus datos y lea como siempre, como si fuera texto sin formato.

read.table('myfile.gz')
John
fuente
¡Ordenado! No sabía eso. Gracias.
EngrStudent - Restablece a Monica el