Rでデータの読み取り(Excel)

Excelでデータを管理することは多いですよね?
そのため、Excelのデータを読み取って、データを利用したいですよね?

ExcelのデータをRで読み取るには?

Excelデータを読み取るには、大きく分けて2つの方法があります。
 1. Excelファイルをcsvファイルに変換する。
 2. 「xlsx」パッケージを利用する。


では、それぞれを説明していきます。

ExcelをCSVに変換

ExcelをCSVに変換するには、「Excelのファイルタブ>名前を付けて保存」から、csv形式を指定します。
059


その後、CSVファイルとして取り込みます。
CSVファイルの読み取り方はこちら


「xlsx」パッケージを利用する

まず、「xlsx」パッケージをインストールします。
Rパッケージのインストール方法はこちら
ちなみに、Javaをインストールしてなかったり、RとJavaのbit数が一致していないとエラーになるそうです。


次に、「xlsx」パッケージをロードします。
060


Excelのデータを読み込むには、「read.xlsx」または「read.xlsx2」を利用します。
ヘルプによれば,read.xlsx() より read.xlsx2() のほうがJava依存度が高く,行方向に大きいデータでは1桁高速とのことです。
初期状態では1行目が列の名前になります。
read.xlsx() は,それ以降の最初の空でない要素から各列のデータ型を判断します。
read.xlsx2() はすべて文字列として読みこみます。


読み込む際のオプションは以下のものがあります。

file ファイル名
sheetindex シート番号を指定。左から2番目のシートなら2となる。
sheetname 読み取り対象シートの名称
startrow 読み込み開始行。2行目なら2を指定する。
endrow 読み取り終了行。10行目なら10を指定する。
rowindex 読み取り対象行を指定。(1:5)で1行目から5行目まで指定する
colindex 読み取り対象列を指定。(2:3)でb,c列を指定する。
header true:ヘッダー行をタイトル行とする。
false:ヘッダー行なし
encoding ファイルのエンコードを指定。全角文字の場合、「utf-8」にすれば文字化けが解消される。
「euc-jp」, 「shift-jis」, 「utf-8」などを指定できます。



では、実際に取り込んでみます。
今回はこのようなExcelファイルを取り込みます。(ファイル名は「Book1.xlsx」、シート名は「test」です。)
061


全範囲を取り込む場合

> read.xlsx(file=”Book1.xlsx”,sheetName=”test”,encoding=”UTF-8″)
A列 B列 C列 D列 E列 F列
1 A1 B1 C1 D1 E1 F1
2 A2 B2 C2 D2 E2 F2
3 A3 B3 C3 D3 E3 F3
4 A4 B4 C4 D4 E4 F4
5 A5 B5 C5 D5 E5 F5
6 A6 B6 C6 D6 E6 F6
7 A7 B7 C7 D7 E7 F7
8 A8 B8 C8 D8 E8 F8
9 A9 B9 C9 D9 E9 F9
10 A10 B10 C10 D10 E10 F10



3行目から7行目までのC,D,E列を取り込む

read.xlsx(file=”Book1.xlsx”,sheetName=”test”,rowIndex=3:7,colIndex=3:5,header=”false”,encoding=”UTF-8″)
X3 X4 X5
1 C2 D2 E2
2 C3 D3 E3
3 C4 D4 E4
4 C5 D5 E5
5 C6 D6 E6

タイトル列があるため、3行目がC2になっています。
また、headerをfalseにすると、Xn(nは列番号)がタイトル行に挿入されます。

read.xlsxとread.xlsx2の違いは?

違いを確かめるために、このデータを読み込んでみます。
062
ちなみにE1セルには「=3+5」、E2セルには「=SUM(1,2,3)」が入力されています。
また、各列、タイトル通りのセル書式にしています。(日付列は日付のセル書式)


read.xlsx

> read.xlsx(file=”Book1.xlsx”,sheetName=”diff”,encoding=”UTF-8″)
日付 時刻 数値 文字列 数式
1 2014-12-23 1899-12-30 10:45:00 123456789 12345678901234567890123456789 8
2 2014-12-23 1899-12-30 10:45:00 -123456789 -1.23456789012345678901234567890 6
3 2014-12-23 1899-12-30 10:45:00 -123456789 NA
4 2014-12-23 1899-12-30 10:45:00 -123456789 文字列 NA
5 2014-12-23 2014-12-23 10:46:00 NA 1.23 NA



read.xlsx2

> read.xlsx2(file=”Book1.xlsx”,sheetName=”diff”,encoding=”UTF-8″)
日付 時刻 数値 文字列 数式 encoding
1 41996 0.4479166666666667 123456789 12345678901234567890123456789 NA UTF-8
2 41996 0.4479166666666667 -123456789 -1.23456789012345678901234567890 NA UTF-8
3 41996 0.4479166666666667 -123456789 UTF-8
4 41996 0.4479166666666667 -123456789 文字列 UTF-8
5 41996 41996.44861111111 1.23 UTF-8



read.xlsx2の方が高速らしいですが、セルが数字または文字列でない場合、適していないですね。
文字列として取得するため、日付や時刻がわけわからなくなっていますね。
(実際はExcel内部ではこのような値で保持しています。日付セルをコピーして値貼り付けをするとわかりますよ。)
read.xlsxは様々なセル書式に対応していて、より汎用的ですね。

最後に

Excelファイルは使用頻度が高いですが、バイナリファイルのためそのままでは他のアプリケーションと組み合わせることが難しいです。
しかし、1度覚えてしまえば、かなり便利です。
ぜひ、試してみましょう。


コメントを残す

メールアドレスが公開されることはありません。

CAPTCHA