RでExcelのファイルを読む

Excelで入力したデータをRで分析するとき、これまではcsvファイルに出力したものを read.table() 関数で読み込んでいた。しかし、じつはRでExcelのワークシートを直接読み込むことが可能だ。そのほうが手間が省けるうえ、ファイルの同一性を保つこともできてミスが生じにくい。さらに、日付や時刻など、csvでは扱いにくい情報もきちんと保持することができる。 RでExcelのファイルを読むためのいくつかのパッケージとその使い方をまとめておく。この記事は、TeXで有名な奥村晴彦さんの ウェブ記事を参考にしている。

Excelファイルを直接読み込む利点

  1. いちいち csvに出力する手間が省ける。
    • read.csv() だとExcelのデータを修正するたびに再度出力しなくてはならない。
    • read.csv() だと、一つのファイルに複数のシートがある場合、それぞれ出力しなくてはならない。
  2. データの同一性を保てる。
    • 作業の途中で、csvの再出力が面倒でついcsvファイルを直接編集してしまったりすると、次にExcelからcsvを再出力したときに編集内容が失われてしまう。
  3. Excelの “Book” の恩恵にあずかれる。
    • 複数のシートを一つのファイルにまとめてくれる “Book” はやはり便利だ。
  4. 何もしなくても日付や時刻をちゃんと読み込んでくれる。

Excelファイルを扱うパッケージ

  1. xlsxパッケージ
  2. readxlパッケージ
  3. gdataパッケージ
  4. XLConnect パッケージ
  5. openxlsxパッケージ

ここでは xlsxパッケージと readxlパッケージについて簡単に使い方を記す。

xlsxパッケージ

library(xlsx)
data <- read.xlsx("Book1.xlsx", 1)

基本的な使い方は read.table()read.csv() とほとんど同じ。違うのは、ファイル名だけではダメで、シート名 (sheetName)またはシートの番号 (sheetIndex) を指定してやる必要があること。シート内の範囲を指定することもできるようだ。その他、 read.table() のオプションもたいてい使える。とくに、 row.names オプションが使えるのが便利だ。 (特定の列を行の名前として指定するオプション。row.names=1 とすると、1列目はデータ項目ではなく行の名前として読み込まれる。) 複雑な使い方をせず、 read.csv() の代わりとして使いたい人向け

readxlパッケージ

library(readxl)
data <- read_excel("Book1.xlsx", 1)

基本操作は xlsxパッケージと同じ。奥村先生の記事によると読み込みが速いらしい。しかし、 row.names オプションが使えないのが不便。 readxlパッケージで読み込んだデータは tibble という特殊なデータフレームとして出力される。

## 日付と時刻の扱い ##

  • Excelで日付 (年月日)のみを入力した場合: read.xlsx() では Date 型、=read_excel()= では POSIXct, POSIXt オブジェクトとなる。
  • Excelで時刻のみを入力した場合: POSIXct, POSIXt オブジェクトとなって、日付は1899年12月30日と解釈される。
    • 秒を省略すると00秒となる。
  • Excelで日時 (年月日時分秒) を入力した場合: POSIXct, POSIXt オブジェクトとなる。
    • 奥村先生の記事では表示形式によって秒が切り捨てられるとあるが、僕の環境ではちゃんとしていた。
    • 秒を省略すると00秒となる。
竹ノ下祐二
竹ノ下祐二
理学療法学科 教授

専門分野:人類学・霊長類学、生物多様性保全学、子ども学