Il modo migliore per archiviare semplicemente i dati per l'analisi statistica in R [chiuso]


12

Sto usando i file di testo per memorizzare i miei dati per R senza alcun problema da qualche tempo. Ma per un progetto recente le dimensioni dei file stanno diventando troppo grandi per essere gestite da file di testo non elaborati. Qual è la migliore alternativa semplice?


5
In che modo i file di testo stanno diventando troppo grandi? Hai paura della loro integrità? Non riesci ad aprirli in qualche altro software? Sono troppo lenti per caricarsi? Troppo grande per il tuo disco rigido (laptop?)?
Galà,

3
+1 La gestione dei dati man mano che i progetti crescono è un problema universale nell'analisi dei dati (ed è poco specifico R). La preoccupazione fondamentale riguarda l'integrità dei dati piuttosto che la dimensione del file: proporre una forma di compressione non fa altro che oscurarlo piuttosto che risolverlo.
whuber

Al di sopra di una certa dimensione txt non sembra funzionare. Posso aggiungere i dati extra al file txt e caricarli in R, ma i dati extra non sono in R. (A proposito i dati sono piuttosto ricchi, quindi mentre la compressione può aiutare un po 'non mi porterebbe così lontano e io sospetto che il mio progetto cresca, finirò di nuovo con gli stessi problemi.)
Toy Molto

Devi dirci di più sui tuoi dati, non esiste un "modo migliore per qualsiasi tipo di dati".
zx8754,

Vuoi dire che read.tableo read.csvstai fallendo in silenzio? Sei assolutamente sicuro di non avere diversi file in giro e qualche errore di codifica (percorso errato, nome file errato, ecc.)? Solo per correggere le idee, potresti anche darci un'idea di quante variabili e di quanti record hai a che fare.
Galà,

Risposte:


10

L'approccio standard R è di usare savee load. Se esegui saveil tuo frame di dati dopo averlo importato e annotato, puoi specificare compress=TRUEe rimarrai stupito dalla compressione e dal loadtempo veloce . Funziona particolarmente bene se la dimensione dell'oggetto è inferiore a circa 400 MB. Altrimenti, dai un'occhiata ad alcuni dei suggerimenti precedenti o al potente ffpacchetto in R.

Il Hmiscpacchetto ha piccoli involucri Savee Loadper rendere quanto sopra ancora più indolore:

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

9

Dai un'occhiata ai database SQLite3. Ogni database è un file, quindi non richiede la configurazione di un server di database.

Per creare un database:

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

Da utilizzare con R, https://gist.github.com/lynaghk/1062939


+1 L'utilizzo di un database reale è un enorme passo nella giusta direzione.
whuber

Questo sarebbe lo strumento appropriato? cran.r-project.org/web/packages/RSQLite/index.html
EngrStudent

Grazie, proverò questo percorso. Ho guardato anche MySQL, ma sembra essere più di quello che mi serve.
Toy Molto

4

Esistono numerose opzioni generiche.

  • È possibile comprimere il testo.
  • Potresti andare binario sul testo, non scrivere in ascii

La grande compressione dipende dai dati.

La mia ipotesi (e non l'hai specificata, quindi devo indovinare) è che stai cercando di archiviare dati simili a fogli di calcolo in qualcosa di diverso da CSV (delimitato da virgole).

Uno dei miei formati preferiti (adoro MatLab) è l'hdf.

Ecco le informazioni relative a R su HDF:

È un formato di archiviazione dati supercomputer ad alta densità. Può essere molto veloce ed efficiente. È anche (non sorprende) più denso del testo compresso.


3

Le funzioni standard di lettura dei file in R ora leggeranno automaticamente facilmente i file compressi con gzip. Quindi, esegui semplicemente la compressione gzip sui tuoi dati e leggi come sempre, come se fosse un testo semplice.

read.table('myfile.gz')

! Neat Non lo sapevo. Grazie.
EngrStudent,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.