2013-04-11 8 views
11

Gibt es sowieso, um den folgenden Prozess in R zu beschleunigen?Schnellere Möglichkeit, mehrere CSV zu einem Datenrahmen zu lesen?

theFiles <- list.files(path="./lca_rs75_summary_logs", full.names=TRUE, pattern="*.summarylog") 

listOfDataFrames <- NULL 
masterDataFrame <- NULL 

for (i in 1:length(theFiles)) { 
    tempDataFrame <- read.csv(theFiles[i], sep="\t", header=TRUE) 
    #Dropping some unnecessary row 
    toBeRemoved <- which(tempDataFrame$Name == "") 
    tempDataFrame <- tempDataFrame[-toBeRemoved,] 
    #Now stack the data frame on the master data frame 
    masterDataFrame <- rbind(masterDataFrame, tempDataFrame) 
} 

Grundsätzlich lese ich mehrere csv-Dateien in einem Verzeichnis. Ich möchte alle CSV-Dateien zu einem riesigen Datenrahmen durch Stapeln der Zeilen kombinieren. Die Schleife scheint länger zu laufen, wenn der masterDataFrame größer wird. Ich mache das auf einem Linux-Cluster.

Antwort

12

Aktualisierte Antwort mit data.table::fread.

require(data.table) 
out = rbindlist(lapply(theFiles, function(file) { 
     dt = fread(file) 
     # further processing/filtering 
     })) 

fread() erkennt automatisch Header-Datei Separator, Spalte Klassen, nicht Strings konvertieren standardmäßig Faktor .. Griffe eingebetteten Anführungszeichen, ist recht schnell etc .. Siehe ?fread für mehr.


Siehe Verlauf für alte Antworten.

+0

Vielen Dank. rbindlist beschleunigt die Dinge wirklich! – WonderSteve

+6

Verwenden Sie 'fread' anstelle von' read.csv', wenn Sie den data.table-Pfad durchgehen .... – mnel

Verwandte Themen