日々のつれづれ

不惑をむかえ戸惑いを隠せない男性の独り言

エクセルファイルの読み込み

若い頃、エクセルはマックに無料でついてくるソフトだったけど、いつの間にかワードパーフェクトやパーシュエージョンを真似て、オフィスなって洒落た名前になってしまった。振り返るとすごいことだなぁって思う。
だから、Rで解析してても、エクセルをハンドリングできないと不便と思われてしまう。
(Rで閉じることができるからエクセルはいらないはずなのにね)

今はUbuntuですが、少し前はウィンドウズだったし、頼まれるときもウィンドウズが多いように思う。だから、ここからはウィンドウズの話。
最近のマックはLinuxらしいけど、Ubuntuと似ているのだろうか?

エクセルファイルを操作するにはいくつもパッケージがある。
これは、エクセルファイルが独自フォーマットを持つので、Rの標準関数では読み込めないから。
例えば、前に作成したdata.frame.txt をエクセルで開いてエクセル形式でdata.frame1.xlsなんて別名で保存するともうダメ。
read.table系関数では読み込めません。

> xls <- read.delim("data.frame1.xls") # これはエラーになる

MicrosoftODBC ドライバを使用して、エクセルファイルのワークシートを取ってくる。

> 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

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が出るようになってる…知らなかった。
昔は、全角があるとうまくいかない時があって、エクセルで再編集してたけど、これは修正されたのだろうか?
結局、「タブ区切りテキスト」で保存するままなのかな?

上のwarningのように、Excel2007から拡張子がxlsxになったので、読み書きが不自由になっている(らしい)。
xlsxファイルは経験が浅いので不正確かもしれません。
xlsxパッケージは以前の日記をどうぞ