ファイルから選択した列のみを R に読み取る方法はありますか?(`read.table` と `scan` の間の適切な媒体?) [重複]
-
25-09-2019 - |
質問
この質問にはすでに答えがあります:
- 選択した列のみを読み取ります 3 つの答え
区切り文字で区切られた非常に大きなデータ ファイルがいくつかあり、 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 パッケージ これは、次を使用してマップリデュース ルーチンを提供します。 ハドゥープ.