1

その月の各日の csv ファイルを読み込んでデータ フレームを作成したいと考えています。私の毎日のcsvファイルには、同じ行数の文字、倍精度、および整数の列が含まれています。特定の月の最大行数を知っており、列数は各 csv ファイルで同じままです。CSV ファイル名のリストを含む fileListing を使用して、月の各日をループします (たとえば、1 月の場合)。

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

4

3 に答える 3

3

それらを でリストに読み込み、それらlapplyを一度に結合することができます:

data <- lapply(fileListing, read.csv, header = FALSE, stringsAsFactors = FALSE, row.names = NULL)
df <- do.call(rbind.data.frame, data)
于 2016-04-06T20:52:41.050 に答える
1

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

read.csv の読み取りを高速化する機能は、nrow および colClass 引数を使用することです。各ファイルの行数を知っていると言うので、R にこれを伝えると読み取りが高速化されます。を使用して列クラスを抽出できます

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

次に、結果を colClass 引数に渡します。

データが大きくなりすぎている場合は、個々のファイルを処理して中間バージョンを保存することを検討してください。このトピックをカバーするサイトには、メモリの管理に関連する議論が多数あります。

メモリ使用の秘訣について: R セッションで使用可能なメモリを管理するための秘訣

ガベージ コレクタ機能の使用について: R で gc() コマンドを使用してガベージ コレクションを強制的に実行する

于 2016-04-06T20:27:41.753 に答える