2013-04-11 11 views
11

Rに次の処理を高速化する方法はありますか?複数のCSVを1つのデータフレームに高速に読み込む方法はありますか?

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) 
} 

基本的に、私はディレクトリ内の複数のcsvファイルを読んでいます。私は、行を積み重ねることで、すべてのcsvファイルを1つの巨大なデータフレームに結合したいと考えています。 masterDataFrameのサイズが大きくなるにつれ、ループの実行時間は長くなります。私はLinuxクラスタ上でこれをやっています。

答えて

12

回答がdata.table::freadで更新されました。

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

fread()自動的に、ヘッダー、ファイル区切り、列クラスを検出し、デフォルトでは考慮して文字列を変換しません..埋め込まれた引用符を処理など非常に高速..です多くのための?freadを参照してください。


古い回答の履歴を参照してください。

+0

ありがとうございます。 rbindlist本当に物事をスピードアップ! – WonderSteve

+6

あなたがdata.tableのパスを下っている場合、 'read.csv'の代わりに' fread'を使います。 – mnel

関連する問題