1

私は常にExcelファイルをCSVファイルに変換して、次のようにRにインポートします。

myDataFrame <- read.csv("mydatafile.csv", stringsAsFactors=F)

しかし、中国語で書かれた xlsx ファイルを変換すると、重大な問題が発生しました。ほとんどの文字 (すべてではない) に「??」が表示される エンコーディングのため。

そこで、xlsxパッケージを使用して直接インポートすることにしました。しかし、問題は、Excel ファイルのサイズが 10MB を超えることです。JVM のメモリ制限のため、エラー メッセージが表示されました。(xlsx内部でJavaを使用していると思います。)

.jcall("RJavaTools", "Ljava/lang/Object;", "invokeMethod", cl, のエラー:
java.lang.OutOfMemoryError: GC オーバーヘッド制限を超えました

中国語のExcelファイルをRにインポートするにはどうすればよいですか? 「名前を付けて保存..」CSVファイルを試し、メモ帳で開き、オプション「UTF-8」で保存しました。しかし、結果は同じでした(「??」が表示されます)。

参考までに、元の Excel ファイルで完全な漢字を確認できます。

4

1 に答える 1

2

あなたの質問は複雑なものです。xlsx ファイルを csv に変換したとします。まだお持ちでない場合は、このような他のスレッドを参照してください。このステップは、R ではなく外部ツールで実行するのが最適だと思います。

これで csv ができましたが、サイズとエンコーディングという 2 つの問題が残っています。エンコーディングについては、コメントで述べたように、read.csv などのいくつかの R 関数の encoding= オプションを使用できます。Excel から出力される中国語ファイルの場合、エンコーディングはおそらく "GB18030" です。判断できない場合は、Libreoffice Calc の [ファイルを開く] ダイアログでヒントが得られる場合があります。

ファイル サイズが大きい場合は、最初に Linux コマンドの iconv を使用してエンコードを変換し、次に R でさらに処理することができます。

次にサイズ部分です。50MB または 500MB の csv は、十分なメモリがあれば、必ずしも高速ではありませんが、read.csv で簡単に処理できます。ファイルが 1G より大きい場合は、次の 2 つのオプションがあります。

  1. csv を一時データベースに読み込み、次に data.frame に読み込む sqldf パッケージを使用します。
  2. csv を 1 行ずつ処理します。最初に file() を使用して接続を作成し、次に readLines() を使用して行ごとに処理します。最後に、結果を手動で data.frame または他の適切な構造に結合します。

前者はよりシンプルで、後者は非常に大きなファイルを処理できます。

それが役に立てば幸い。

于 2013-11-01T13:26:17.220 に答える