Modi di leggere solo selezionare le colonne da un file in R? (Una via di mezzo tra il `` read.table` e scan`?) [Duplicato]

StackOverflow https://stackoverflow.com/questions/2193742

Domanda

    

Questa domanda ha già una risposta qui:

    
            
  •              colonne sola lettura selezionate                                      3 risposte                          
  •     
    

Ho alcuni file di dati delimitato molto grandi e voglio elaborare solo alcune colonne in R senza prendersi il tempo e la memoria per creare un data.frame per l'intero file.

Le uniche opzioni che conosco sono read.table che è molto dispendioso quando voglio solo un paio di colonne o scan che sembra troppo basso livello per quello che voglio.

C'è una scelta migliore, sia con puro R o forse chiamando a qualche altro script di shell per fare l'estrazione della colonna e quindi utilizzando la scansione o read.table su di essa la potenza? (Che porta alla domanda Come chiamare uno script di shell e catturare la sua uscita in R?).

È stato utile?

Soluzione

A volte mi fare qualcosa di simile quando ho i dati in un file delimitato da tabulazioni:

df <- read.table(pipe("cut -f1,5,28 myFile.txt"))

che consente di cut fare la selezione dei dati, che si può fare senza l'utilizzo di memoria a tutti.

leggere solo un numero limitato di colonne per la versione pura R, utilizzando "NULL" nell'argomento colClasses a read.table.

Altri suggerimenti

Una possibilità è quella di utilizzare pipe() al posto del nome del file e hanno filtri awk o simili estrarre solo le colonne che si desidera.

Vedere help(connection) per maggiori informazioni su pipe e gli amici.

Modifica : read.table() può anche fare questo per voi se siete molto esplicito su colClasses - un valore NULL per una data colonna salta l'alltogether colonna. Vedere help(read.table). Così ci abbiamo una soluzione in base di R, senza pacchetti o strumenti aggiuntivi.

Credo che l'approccio di Dirk è semplice e veloce. Un'alternativa che ho usato è quello di caricare i dati nel SQLite che carica molto più veloce di quanto read.table () e poi tirare fuori solo quello che vuoi. lo sqldf package () rende tutto questo abbastanza facile. Ecco un link ad un precedente Stack Overflow risposta che dà esempi di codice per sqldf ().

Questo è probabilmente più del necessario, ma se si opera su molto grande set di dati, allora si potrebbe anche dare un'occhiata a il pacchetto HadoopStreaming che fornisce una mappa-ridurre di routine utilizzando Hadoop .

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top