ファイルから選択した列のみを R に読み取る方法はありますか?(`read.table` と `scan` の間の適切な媒体?) [重複]

StackOverflow https://stackoverflow.com/questions/2193742

質問

この質問にはすでに答えがあります:

区切り文字で区切られた非常に大きなデータ ファイルがいくつかあり、 Rで特定の列だけを処理したい 作成するのに時間と記憶を費やすことなく、 data.frame ファイル全体に対して。

私が知っている唯一のオプションは read.table いくつかの列だけが必要な場合、または scan これは私が望むものに対してレベルが低すぎるようです。

純粋な R を使用するか、他のシェル スクリプトを呼び出して列抽出を実行し、その出力で scan または read.table を使用する、より良いオプションはありますか?(これは、シェル スクリプトを呼び出してその出力を R でキャプチャする方法という疑問につながります。)

役に立ちましたか?

解決

私はタブ区切りファイル内のデータを持っている場合、

時々私はこのような何かをします:

df <- read.table(pipe("cut -f1,5,28 myFile.txt"))
cutはそれがすべてでは多くのメモリを使用せずに行うことができ、データの選択を、行うことができます。

のみの列の数が限られて読んでくださいは"NULL"colClasses引数にread.tableを使用して、純粋なRバージョンのを。

他のヒント

一つの可能性は pipe() の代わりにファイル名として awk または類似ィルタエキスのカラムのみです。

help(connection)pipe ます。

編集: read.table() でもいまだ明確な約colClasses--の値はNULLに指定されたカラムスキップ列のalltogether.見 help(read.table).がお客様の声にお応えしてベースR無追加パッケージにはツールです。

私はディルクのアプローチは、まっすぐ進むだけでなく、高速であると思います。私が使用したことの代替がはるかに速い()read.tableをよりどの負荷のsqliteにデータをロードして、あなたが望むものだけを引き出すことです。パッケージsqldfは()これは全て非常に容易になります。 はここで、前へリンクするですsqldfのコード例を示し、スタックオーバーフローの答えは()。

これはおそらく必要以上のものですが、 非常に大きい データセットについては、こちらもご覧ください HadoopStreaming パッケージ これは、次を使用してマップリデュース ルーチンを提供します。 ハドゥープ.

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top