data.table::fread
を使用してインポートしようとしている大きなファイル(3.5G)があります。
もともとは、テキストとして開かれ、CSVとして保存されたrptファイルから作成されました。
これは、同じタイプのデータが同じ列ですべての小さなファイルでうまく機能しました。これは、より長い時間枠とより広い範囲のためだけです。
実行しようとすると
mydata <- fread("mycsv.csv")
エラーが表示されます:
Fread( "mycsv.csv")のエラー:文字列に埋め込まれたNUL: 'y\0e\0a\0r\0'
これは何を意味するのでしょうか?
次のようなものを使用して、コマンドラインでnullターミネータを削除できます。
sed 's/\\0//g' mycsv.csv > mycsv.csv
または、@ marbelが示唆しているように、freadを使用すると、テキスト内でsed呼び出しを渡すことができます。といった:
fread("sed 's/\\0//g' mycsv.csv")
この小さな機能をテストできます:
cleanFiles<-function(file,newfile){
writeLines(iconv(readLines(file,skipNul = TRUE)),newfile)
}
それは私の仕事です
この場合、fread
ではなく、UTF-16LEのfileEncodingでread.csv
を使用できます。
read.csv("mycsv.csv",fileEncoding="UTF-16LE")
データサイズを考慮すると、read.csv
の使用には数分かかりますが、大したことではないと思います。
これを解決する非技術的な方法は、
問題のある。csvを開きます
Ctrl + A(すべて選択)
新しいExcelシートを開く
右クリックして「値として貼り付け」を選択します
元のファイルの代わりにこのファイルを保存して使用します。
私のために働いて、多くの時間はかかりません。
ASCIIファイルでNUL(x00)文字が表示されている場合、これを行うことができます:data.table :: fread(text = readLines(pathIn、skipNul = T)、...)