私は大規模(8GB)のデータセットを持っています。これは、既存のセットアップを使用してRに読み込むことはできません。データセットでfread
を使用しようとすると、すぐにRセッションがクラッシュし、基礎となるファイルからランダムな行を読み込もうとすると、以下の理由で不十分でした。(1)データセットの行の総数を知る良い方法がない。 (2)私の方法は真の「ランダムサンプリング」ではありませんでした。R:大規模なデータフレームの単純なランダムサンプル
失敗した行の数を取得するためにこれらの試み(彼らは限り単純にデータを読み取る:
length(count.fields("file.dat", sep = "|"))
read.csv.sql("file.dat", header = FALSE, sep = "|", sql = "select count(*) from file")
Rを経由して任意の方法はありますか大きな基礎をなすデータセットからランダムサンプルを生成する他のプログラム?
潜在的な考え方:最初の数行の「サンプル」を使用して、行ごとに含まれる平均情報量を知ることができます。そして、データセット(8GB)のサイズを与えなければならない行の数を戻しますか?これは正確ではありませんが、私はちょうどアンダーカットできるボールパークの数字を与えるかもしれません。
SQLite dbに入れて、RSQLiteまたはdplyr経由でランダムな行セットを直接取得します。 – joran
[reservoir sampling](https://en.wikipedia.org/wiki/Reservoir_sampling)のようなメソッドがありますが、共通のRパッケージの実装についてはわかりません。 – MrFlick
最初の列を読み込み、行数を取得します( 'col.names')。 'fread'関数の' skip'と 'nrow'引数を使ってチャンクで読み込みます。これまでにそれをテストしていないかもしれませんが、おそらく非常に遅いですが動作する可能性があります。あなたがチャンクを得るたびに、そこからサンプルを取り出し、それを 'rm'してください。 – LyzandeR