R で xlsx ファイルを読み込む

Gustavo du Mortier 2023年1月30日
  1. インポートするファイルをユーザに指定させる
  2. R で xlsx ファイルを読み込むには、openxlsx ライブラリを利用する
R で xlsx ファイルを読み込む

Excel スプレッドシートからデータを取得して R にインポートする最も一般的な方法は、Excel を使用して .csv のような従来の形式でデータを保存することです。しかし、xlsx ファイルを繰り返しインポートする必要がある場合は、Excel ファイルを直接 R にインポートするパッケージを使用するなど、より迅速なオプションが望ましい。

R の多くのパッケージは xls/xlsx ファイルを読み込む機能を持っています。その一つが readxl です。このパッケージは他のパッケージに比べて外部からの依存関係が少ないため、ほとんどのオペレーティングシステムに簡単にインストールできます。R 環境に追加する最も簡単な方法は、以下のコマンドで tidyverse ライブラリ全体をインストールすることです。

install.packages("tidyverse")

しかし、これは tidyverse のコアライブラリではないので、library(readxl) コマンドで明示的に読み込む必要があります。そうすれば、以下のように read_excel 関数を使って Excel ファイルをインポートできるようになります。

MySheet <- read_excel("ExcelFile.xlsx")

先ほどの例では、ExcelFile.xlsx という名前のスプレッドシートの内容を MySheet というデータフレームにインポートしています。

インポートするファイルをユーザに指定させる

事前に Excel ファイルの場所が分からず、ユーザにファイルを選択させて読み込ませたい場合は、ファイルパスを明示的に指定する代わりに file.choose() を用いることができます。

MySheet <- read_excel(file.choose())

関数 read_excel() には、インポートする特定のシートを指定したり、空白のセルの代わりに NAs を表す値を指定するためのパラメータがあります。この例では、data というシートをインポートし、NA という内容を持つセルを NAs として解釈することを指定しています。

MySheet <- read_excel("ExcelFile.xlsx", sheet = "data", na = "NA")

R で xlsx ファイルを読み込むには、openxlsx ライブラリを利用する

Excel ファイルを R に読み込むのに使えるもう一つのパッケージとして、openxlsx があります。このパッケージは xlsx ファイルの読み書きを簡素化し、readxl のように Java や Perl などの外部ライブラリに依存しません。Rcpp を用いることで、openxlsx は巨大なファイルでも高速な読み書きを実現します。このライブラリは xlsx ファイルに対しては問題なく動作するが、古い xls ファイルには対応していません。

Openxlsxread.xlsx 関数を提供し、インポートしたファイルから読み込んだデータをデータフレームとして作成します。この関数には、インポートする領域に行名や列名が含まれているかどうか、インポートするワークシートの名前や番号、インポートする行や列などを指定するための多くのオプションが用意されています。

以下の例では、パッケージ openxlsx をインストールしてライブラリを開く。次に、read.xlsx のオプションを使って、シート 1 の Data.xlsx というファイルから 2 行目、4 行目、6 行目、5 列目から 7 列目をインポートします。

サンプルエクセル

その後、得られたデータフレームの内容をコンソールに出力します。ファイルからカラム名を読み込まないので、パラメータ colNamesFalse に設定します。R は、インポートされたデータフレーム内の列に X1X2X3 のようなデフォルトの列名を自動的に割り当てます。インポートする行と列をベクトルで指定することで、インポートする行と列を指定できることに注意してください。

install.packages("openxlsx")
library("openxlsx")
MyData <- read.xlsx(xlsxFile="c:/Tmp/Data.xlsx", sheet = 1, rows = c(2, 4, 6), cols = 5:7, colNames = FALSE)
MyData

出力:

  X1 X2 X3
1 34 12 17
2 15 25 66
3 32 45 56

詳細は公式の openxlsx ドキュメント を参照してください。