最終的なリグレッション、ビジュアライゼーションなどのために、一連の大規模 (〜 300M) および非常に大規模 (〜 4G) の固定幅ファイルを読み込もうとしています (そして最終的にはマージ/リンク/操作)。
まず、ファイル自体の形式が奇妙です。SQL のようなものだと思います。ファイル形式は、 https ://msdn.microsoft.com/en-us/library/ms191479.aspx で参照できます 。それは固定幅ですが、最後の列は (時々?) その列の完全な固定幅が経験される前に \r\n で途切れているようです。それを読むために、laf_open_fwf と data.table::fread を試しましたが、どちらも混乱しているようです。サンプル ファイルと関連する非 XML 形式の記述子は、こちら にあります。あの間抜けな最後のコラムでは、適切に読み取ることすらできません。ファイルのサンプルを次に示します。
1 1 7 7 ER
2 2 9 8 OI
3 54016 1988006 1953409 OI
4 54017 1988014 1953415 ER
5 54017 1988014 1953415 OB
(ただし、CR/LF はここでは見えず、問題はそれらの奇妙な配置であることに注意してください。上記の .txt ファイルまたは png ファイルへのリンクを参照してください (リンクできません、低担当者) のメモ帳 ++ ビューのフィールドの問題を実証するためのデータ。)
次に、ファイル サイズが問題です。やらなければならないテーブル操作がたくさんあることはわかっているので、data.table を見てみたくなるのですが、data.table はオブジェクト全体を RAM に格納すると考えており、これは問題になるでしょう。LaF、ffdf、または sqlite はオプションのようですが、私はそれらに慣れていないため、最初にこのファイル形式の問題に対処する必要があります。
LaF、ffbase、またはdata.tableが以下にあることを示唆する、この一般的なアイデアに関するいくつかの質問があります...
R で非常に大きなテーブルをデータフレームとしてすばやく読み取る
...しかし、(1) この奇妙な固定幅っぽい形式を処理したり、(2) データを最終的に data.tables に移動したりするものはないようです。これを最初に試してみたいと思います。私は、それらを開いて適切にフォーマットされた CSV として書き直して、data.table で処理できるようにすることを考えました (data.frames を介して csv に戻る私の間抜けなハックは、ばかげており、スケーラブルではないように感じます)。また、CSV エクスポートは、ファイルがどのように混乱するかを示しています。これは、laf リーダーが /r/n の場所に基づいて調整するのではなく、厳密にフィールド長を使用しているためです...
現在、私は手始めに以下のようなものを試しています。可能であれば、助けてください。
require("data.table", "LaF", "ffbase")
searchbasis.laf = laf_open_fwf("SEARCHBASIS.txt",
column_widths = c(12, 12, 12, 12, 10),
column_names = c("SearchBasisID", "SearchID", "PersonID", "StopID", "Basis"),
column_types = rep("string",5),
trim = T)
# ^ The laf_open_fwf quietly "fails" because the last column doesn't always
# have 10 chars, but sometimes ends short with /r/n after the element.
searchbasis.dt = as.data.table(as.data.frame(laf_to_ffdf(searchbasis.laf)))
write.csv(searchbasis.dt, file="SEARCHBASIS.csv")
# ^ To take a look at the file. Confirms that the read from laf, transfer
# to data.table is failing because of the last column issue.