2016-04-06 11 views
0

月の毎日のcsvファイルを読み込んでデータフレームを構築したいと思います。私の毎日のcsvファイルには、文字列、倍精度文字、および同じ数の行の整数が含まれています。私は与えられた月の最大行数を知っていて、各csvファイルの列数は同じです。 I(1月の言う、)csvファイル名のリストが含まれfileListing、と月の各日をループ:私は(当たり前)の一部を考え出したとして、私の質問を改訂したためread.csvからのデータのプログレッシブ付加

output <- matrix(ncol=18, nrow=2976) 
for (i in 1 : length(fileListing)){ 
    df = read.csv(fileListing[ i ], header = FALSE, sep = ',', stringsAsFactors = FALSE, row.names = NULL) 
    # each df is a data frame with 96 rows and 18 columns 

    # now insert the data from the ith date for all its rows, appending as you go 
     for (j in 1 : 18){   
      output[ , j ] = df[[ j ]] 
     } 
} 

申し訳ありませんが、データフレームの最後にデータを徐々に挿入するにはrbindを使うべきですか、それとも遅いのですか?

ありがとうございます。

BSL

+0

リストにすべてを読み込み、 'do.call(rbind.data.frame、data)'を使ってすべてを一度に組み合わせる方が良いでしょう。 –

答えて

1

データは、使用可能なメモリに比べてかなり小さい場合には、ちょうどにデータを読み、それについて心配しないでください。すべてのデータを読み込み、クリーニングを実行した後、save()を使用してファイルを保存し、load()を使用して解析スクリプトをそのファイルに読み込ませます。この問題を軽減するには、読み取り/クリーニングスクリプトを解析クリップから分離するのが良い方法です。

read.csvの読み込みを高速化する機能は、引数nrowとcolClassを使用することです。あなたが各ファイルの行数を知っていると言っているので、Rにこれを伝えれば、読書のスピードアップに役立ちます。

colClasses <- sapply(read.csv(file, nrow=100), class) 

この結果をcolClass引数に指定すると、列クラスを抽出できます。

データが近すぎる場合、個々のファイルの処理と中間バージョンの保存を検討することがあります。このトピックを扱うサイト上のメモリを管理することには、数多くの関連する議論があります。メモリ使用量のトリックで

Tricks to manage the available memory in an R session

ガベージコレクタ機能を使用してオン: Forcing garbage collection to run in R with the gc() command

+0

私はそのステップを考えましたが、毎月のデータフレームのデータの最初の日の最後に2日目が追加されるように、毎月のファイルのコレクションを書きたいと思っています。おかげさまで –

+0

colClassとnrowの引数に関する2つの編集を行います。これらは、読み取り時間とメモリの使用に役立ちます。 rbindを使用すると、適度なサイズのデータ​​セットで高速になります。 – lmo

1

あなたが一度にすべてを組み合わせて、その後、lapplyでリストにそれらを読むことができます:

data <- lapply(fileListing, read.csv, header = FALSE, stringsAsFactors = FALSE, row.names = NULL) 
df <- do.call(rbind.data.frame, data) 
2

まず、すべてのデータを保持するマスターデータフレームを定義します。次に、各ファイルの読み込み時に、マスターにデータを追加します。

masterdf<-data.frame() 
for (i in 1 : length(fileListing)){ 
    df = read.csv(fileListing[ i ], header = FALSE, sep = ',', stringsAsFactors = FALSE, row.names = NULL) 
    # each df is a data frame with 96 rows and 18 columns 
    masterdf<-rbind(masterdf, df) 
} 

ループの最後に、masterdfにすべてのデータが含まれます。このコードコードは改善することができますが、データセットのサイズについては、これは十分に速くなければなりません。

関連する問題