一所懸命に手抜きする

デスクワークばかりのスポーツ嫌いで50歳も過ぎ、いよいよ足腰に衰えを感じつつある昨今。

Excelからデータを読み込むR関数(2)readxl::read_excel

Rは標準ではExcelファイルを読み込めないらしい

企業では多くのデータがExcelファイルとして存在しますがRの標準ではExcelファイルを読み込めないのでした。
RODBCパッケージの関数を使うことで読み込めることを紹介しました。 最近ではreadxlという新しいパッケージが発表され、これがなかなか良いという評判です。

まずはサンプルを

例えば、Excelファイル「RTest.xls」の「社員名簿」シートがあります。

社員名簿サンプルExcelファイル作成コード

RでExcelデータを読み込む(2)

readxlパッケージを使う方法

 比較的新しいパッケージにreadxl(CRAN - Package readxl)があります。これを使うとExcelファイルからの読み込みが簡単です。このパッケージはEZRまたはrcmdrをインストールすると一緒にインストールされています。もちろん単独でインスールしても構いません。

readxlパッケージ中のread_excel関数
read_excel(   path,  # Excelのファイルパス名
         sheet = 1,  # シート名かシート番号
  col_names = TRUE,  # ヘッダの有無
  col_types = NULL,  # 列ごとのデータ型を定義。難しいです。
           na = "",  # 欠損値をどの文字に置き換えるか 
           skip = 0) # 読み飛ばす行数
read_excel実行例1
library("readxl")
read_excel("c:/wrk/Rtest.xls")

## DEFINEDNAME: 00 00 00 04 0b 00 00 00 00 00 00 00 00 00 01 3e 79 e1 54 0d 54 3f 7c 3b 00 00 00 00 06 00 00 00 02 00 
## DEFINEDNAME: 00 00 00 04 0b 00 00 00 00 00 00 00 00 00 01 3e 79 e1 54 0d 54 3f 7c 3b 00 00 00 00 06 00 00 00 02 00 
## DEFINEDNAME: 00 00 00 04 0b 00 00 00 00 00 00 00 00 00 01 3e 79 e1 54 0d 54 3f 7c 3b 00 00 00 00 06 00 00 00 02 00 
## DEFINEDNAME: 00 00 00 04 0b 00 00 00 00 00 00 00 00 00 01 3e 79 e1 54 0d 54 3f 7c 3b 00 00 00 00 06 00 00 00 02 00 
##   社員番号   部署     氏名
## 1        1 営業部 山田太郎
## 2        2 営業部 鈴木花子
## 3        3 総務部 杉本一郎
## 4        4 財務部 支払益子
## 5        5 経理部 会計主水
## 6        6 秘書室 白鳥麗子

DEFINEDNAME: が無駄に表示されています。これはバグらしいです(https://github.com/hadley/readxl/issues/82)。とりあえず、結果をデータフレームに取り込んでみます。

read_excel実行例2
library("readxl")
df<-read_excel("c:/wrk/Rtest.xls")
## DEFINEDNAME: 00 00 00 04 0b 00 00 00 00 00 00 00 00 00 01 3e 79 e1 54 0d 54 3f 7c 3b 00 00 00 00 06 00 00 00 02 00 
## DEFINEDNAME: 00 00 00 04 0b 00 00 00 00 00 00 00 00 00 01 3e 79 e1 54 0d 54 3f 7c 3b 00 00 00 00 06 00 00 00 02 00 
## DEFINEDNAME: 00 00 00 04 0b 00 00 00 00 00 00 00 00 00 01 3e 79 e1 54 0d 54 3f 7c 3b 00 00 00 00 06 00 00 00 02 00 
## DEFINEDNAME: 00 00 00 04 0b 00 00 00 00 00 00 00 00 00 01 3e 79 e1 54 0d 54 3f 7c 3b 00 00 00 00 06 00 00 00 02 00 
df
##   社員番号   部署     氏名
## 1        1 営業部 山田太郎
## 2        2 営業部 鈴木花子
## 3        3 総務部 杉本一郎
## 4        4 財務部 支払益子
## 5        5 経理部 会計主水
## 6        6 秘書室 白鳥麗子

DEFINEDNAME:は表示はされるものの結果として引き渡されないので、目障りですが無視して良いようです。

read_excel実行例3

 次に、同じ内容のxlsx形式ファイルを試してみます。

library("readxl")
read_excel("c:/wrk/Rtest.xlsx")
##   社員番号   部署     氏名
## 1        1 営業部 山田太郎
## 2        2 営業部 鈴木花子
## 3        3 総務部 杉本一郎
## 4        4 財務部 支払益子
## 5        5 経理部 会計主水
## 6        6 秘書室 白鳥麗子

こちらは、DEFINEDNAME:が出ていません。
なお、xlsファイルも、私の環境では何が影響したのかDEFINEDNAME:が表示されなくなりました。わからなくてすみません。

In R language,
readxl package enables us to import Excel files to R easily.
But needless DEFINEDNAME:........... lines are printed like headers in the case of conversion from xls files .
I hear it is a bug that has not been fixed yet.
But, fortunately, those printing can be separated from the output of the function.
And in the case of XLSX, DEFINEDNAME: is not printed.
So readxl is the easiest way to import Excel sheet to R dataframe, I think.