1

「ff」パッケージの関数 read.table.ffdf() を使用して、サイズが約 20G の非常に大きな .csv ファイルを読み込もうとしていますが、read.csv() で colClasses オプションを指定する際に問題がありました。

ファイル内の一部の列は非常に長い整数 (11 桁など) のラベルであるため、colClasses オプションを指定する必要があります。たとえば、ファイル内の 2 つの行は

86246,205,17,1719,104116343,8435,2013-03-13,12,OZ,1,2.59
86246,205,17,1719,10800749282,8435,2013-03-13,12,OZ,1,2.59 

整数 10800749282 は「整数」型には大きすぎるため、「数値」または「文字」としてしか扱えません。しかし、上記の行の値 104116343 は十分に大きくないため、R はデフォルトでこの列を「整数」として扱います。

以下を試しましたが、エラーが発生しました。この問題を解決する方法を知っている人はいますか?高く評価!

dat <- read.table.ffdf(file="file.csv", FUN = "read.csv", na.strings = "", colClasses="character")

ff のエラー (initdata = initdata、長さ = 長さ、レベル = レベル、順序付け = 順序付け、: vmode 'character' が実装されていません

4

1 に答える 1

0

エラーが示唆するように、ff 環境内に実装された「文字」データ型はありません。すべての文字を要因として扱う必要があります。ファイルにx個の列が含まれていると仮定すると、以下が機能します。

dat <- read.csv.ffdf(NULL, file="file.csv", na.strings = "", colClasses=rep("factor", x))

ただし、おそらく必要なのは、すべてのデータを因子としてインポートすることではありません。これは非常に非効率的です。すべての数値データを「数値」としてインポートするだけです。最初の5列が数値で、残りの3列が文字であると仮定します。

dat <- read.csv.ffdf(NULL, file="file.csv", na.strings = "", colClasses=c(rep("numeric", 5), rep("factor", 3)))

于 2014-07-01T10:21:19.010 に答える