若い頃、エクセルはマックに無料でついてくるソフトだったけど、いつの間にかワードパーフェクトやパーシュエージョンを真似て、オフィスなって洒落た名前になってしまった。振り返るとすごいことだなぁって思う。
だから、Rで解析してても、エクセルをハンドリングできないと不便と思われてしまう。
(Rで閉じることができるからエクセルはいらないはずなのにね)
今はUbuntuですが、少し前はウィンドウズだったし、頼まれるときもウィンドウズが多いように思う。だから、ここからはウィンドウズの話。
最近のマックはLinuxらしいけど、Ubuntuと似ているのだろうか?
エクセルファイルを操作するにはいくつもパッケージがある。
これは、エクセルファイルが独自フォーマットを持つので、Rの標準関数では読み込めないから。
例えば、前に作成したdata.frame.txt をエクセルで開いてエクセル形式でdata.frame1.xlsなんて別名で保存するともうダメ。
read.table系関数では読み込めません。
> xls <- read.delim("data.frame1.xls") # これはエラーになる
- RODBCパッケージを使う
Microsoft のODBC ドライバを使用して、エクセルファイルのワークシートを取ってくる。
> library("RODBC") > # これでxls ファイルにアクセスしてコネクションを開く > x <- odbcConnectExcel("data.frame1.xls") > sqlTables(x) # xls ファイルの構造を表示 TABLE_CAT TABLE_SCHEM TABLE_NAME TABLE_TYPE REMARKS 1 (ファイルパス) <NA> data#frame1$ SYSTEM TABLE <NA> > > # 特定のワークシートを開くときはquery で明示的に指定 > x <- sqlQuery(channel=x,query="select * from[data#frame1$]") F1 num char factor 1 row1 1 a A 2 row2 2 b B 3 row3 3 c C
- gdataパッケージを使う
Perlを使ってエクセルからデータを抜き出してくるので、ウィンドウズで使うにはActivePerlが必要です。
> library("gdata") gdata: read.xls support for 'XLS' (Excel 97-2004) files ENABLED. gdata: read.xls support for 'XLSX' (Excel 2007+) files ENABLED. 次のパッケージを付け加えます: ''gdata'' The following object(s) are masked from 'package:stats': nobs The following object(s) are masked from 'package:utils': object.size > (y <- read.xls("data.frame1.xls", sheet=1, row.names=1)) num char factor row1 1 a A row2 2 b B row3 3 c C
Excel2007が出てからwarningが出るようになってる…知らなかった。
昔は、全角があるとうまくいかない時があって、エクセルで再編集してたけど、これは修正されたのだろうか?
結局、「タブ区切りテキスト」で保存するままなのかな?
- xlsxファイルを使いたいときはxlsxパッケージ
上のwarningのように、Excel2007から拡張子がxlsxになったので、読み書きが不自由になっている(らしい)。
xlsxファイルは経験が浅いので不正確かもしれません。
xlsxパッケージは以前の日記をどうぞ