~2 GB (525600 行 x 302 列) の 120 個のファイルのコレクションで作業する必要があります。目標は、いくつかの統計を作成し、結果をクリーンな SQLite データベースに入れることです。
read.table() を使用してスクリプトをインポートすると、すべて正常に動作しますが、遅いです。そのため、data.table パッケージ (バージョン 1.9.2) の fread を試してみましたが、次のエラーが表示されます。
Error in fread(txt, header = T, select = c("YYY", "MM", "DD", :
Not positioned correctly after testing format of header row. ch=' '
データの最初の 2 行と 7 行は次のようになります。
YYYY MM DD HH mm 19490 40790
1991 10 1 1 0 1.046465E+00 1.568405E+00
したがって、先頭に最初のスペースがあり、次に日付列の間に 1 つのスペースだけがあり、次に他の列の間に任意の数のスペースがあります。
次のようなコマンドを使用して、スペースをコンマに変換しようとしました:
DT <- fread(
paste("sed 's/\\s\\+/,/g'", txt),
header=T,
select=c('HHHH','MM','DD','HH')
)
成功せず : 問題は残り、sed コマンドでは遅いようです。
Fread は、「任意の数のスペース」をセパレーターとして使用したり、先頭に空の列を配置したりするのが好きではないようです。何か案が ?
これは(おそらく)最小の再現可能な例です(40790の後の改行文字):
txt<-print(" YYYY MM DD HH mm 19490 40790
1991 10 1 1 0 1.046465E+00 1.568405E+00")
testDT<-fread(txt,
header=T,
select=c("YYY","MM","DD","HH")
)
ご協力いただきありがとうございます !
更新: - data.table 1.8.* ではエラーは発生しません。このバージョンでは、テーブルは 1 つの一意の行として読み取られますが、これは良くありません。
更新 2 - コメントで述べたように、sed を使用してテーブルをフォーマットし、fread で読み取ることができました。上記の回答にスクリプトを入れて、サンプル データセットを作成し、次に system.time () を比較します。