2017年3月30日木曜日

Rで機種依存文字の混じったデータファイルを読み込む方法

Rへ読み込む際に非常に厄介な機種依存文字(=環境依存文字)、データを作成する際には絶対に避けてほしい代物ですが、丸に数字など、日本のあらゆる文書で愛されており、根絶は非常に困難です。

見渡せる程度の小さなファイルならば手作業で特定し、検索・置換で除去するのですが、巨大なファイルの場合、いったいどんな文字が悪さをしているのか見つけることさえできない場合がありますね。

今回、到底手作業で対処できないサイズのファイルに取り組んでいた際にいい方法を思いついたので挙げておきます(小ネタです)。

1) まず、機種依存文字のファイルは.xlsxファイルとして保存しておきます(ここでは"データファイル名.xlsx"とします)。

2) 通常、read.csv関数などでデータファイルを読み込むところを、openxlsxパッケージのread.xlsx関数を使用します(要インストール、install.packages("openxlsx") などで)。

3) 以下で読み込むことができます、fileEncodingの指定も特に不要の様子。
data <- read.xlsx("データファイル名.xlsx")

cf. もちろんファイル出力にも対応しています(outputというデータフレームを出力する場合の例)write.xlsx(output, "出力ファイル名.xlsx")

Excelファイルを直接読むのはまだ抵抗はあるのですが、気にしなければ汎用性のある方法なので便利です。あとはこのパッケージがちゃんと存続してくれることを祈るばかりですが。なお、他にもExcelファイルを読めるパッケージは複数存在しているようですが、他のは基本的にJavaに依存しているようなので却下しました。

(2019.09.17 追記)
列名に漢字が混じる場合にフリガナが追加されるエラーが出ていて対処方法が分からず。代替関数として、readxlパッケージのread_excel関数の方が良いかもしれません。こちらならこのエラーは起こらず、またJava不使用です。tidyverseの一部のようなので、将来性もあるかもしれません。一方、読み込むとデータフレームではなくtibleという新形式になります。tible非対応のパッケージもまだ多いので、通常のデータフレームに変換するには、as.data.frame(tible_no_data)としてやればよいです。

cf. 機種依存文字が混じっているファイルをread.csvで読もうとすると、"In scan(file, what, nmax, sep, dec, quote, skip, nlines, na.strings,  : 入力コネクション 'ファイル名.csv' に不正な入力がありました "のようなエラーメッセージが出る。
Rじゃなくとも、メールの送受信でも文字化けの温床となります。データ解析に限らず、トラブルの原因にしかなりません。

0 件のコメント:

コメントを投稿