せっかくRを使えるようになっても、解析したいデータがExcelファイル…。データを解析するには、まず、解析データをExcelファイルからRに読み込む必要があります。ここでは、大きく3つの方法を紹介します。
- クリップボード経由で読み込む
- csvファイルから読み込む
- Excelファイル(xlsx)から直接読み込む
Excelファイルからの読み込み方
クリップボード経由で読み込む
ExcelではなくRでデータ解析をするメリットの一つは、どういうステップでデータ解析を行なったのかをScriptに記録することで再現性を保つことです。ですが、毎回毎回、再現性を保つ必要があるわけでもなく、「ExcelにあるデータをちょっとRで処理したい」、そんなときにはクリップボード経由で読み込むのが簡単かもしれません。以下の2ステップでクリップボードからRにデータを読み込めます。
- Excel上でRに読み込みたいデータをコピーする
- R上で読み込みコードを実行する
Step1 : Excel上でRに読み込みたいデータをコピーする
読み込みたいデータのみなのか、ヘッダー(変数名)を含むのかはどちらでもOKですが、
Step2のコードが若干変わりますので、どの部分をコピーするかを意識してコピー作業を行なってください。
Step2 : R上で読み込みコードを実行する
read.table()関数を使うことで読み込めます。ここでは最低限理解しておく必要がある2つの引数を紹介します。この2つの引数以外にもたくさんの引数でread.tableの挙動を調整することができますので、必要に応じて、ヘルプファイル等を調べてください。
read.tabel(file, header = FALSE)
file
WindowsかMacかでコードが若干変わります。
- Windowsの場合: “clipbord”を指定
- Macの場合: pipe(“pbpaste”)を指定
header
- 読み込みたいデータのみコピーした場合: header = FALSEを指定
- ヘッダーも含めてコピーした場合: header = TRUEを指定
コード
以下のコードでExcelでコピーしたデータを変数xにdata.frameとして取り込むことができます。
# Windows, データのみコピーした場合 x <- read.table("clipbord") # Mac, ヘッダーもコピーした場合 x <- read.table(pipe("pbpaste"), header = TRUE)
csvファイルから読み込む
Excelファイルをcsvとして保存して、そのcsvファイルをRに読み込むことで、ExcelデータをRに読み込むことができます。csvファイルの読み込みはRではよく使われると思いますが、ここでは、2つの方法を紹介します。
- 標準ライブラリのread.csv()関数を使う
- readrパッケージのread_csv()関数を使う
csvファイルは標準ライブラリのread.csv()関数で読むこともできますが、readrパッケージのread_csv()の方が、以下のような特徴を持っています。
- 高速、省メモリ
- 列の名前や肩を指定しやすい
- 指定した列だけ読み込むこともできる
また、read.csv()、read_csv()以外の方法として、data.tableパッケージのfread()関数があります。大きなデータを扱うときは、こちらの方が良いと言われていますが、戻り値の型がRでよく使われるdata.frame( or tibble)ではないので注意が必要です。ここでのfread()関数の紹介は割愛します。
read.csv()関数
read.csv(file, header = FALSE)
read.csv()関数もこの2つの引数以外にもたくさんの引数で挙動を調整することができますが、ここでは最低限必要なこの2つの引数についてのみ紹介しています。
file
読み込みたいcsvファイル名
header
- 読み込みたいcsvの1行目にヘッダーが含まれていない場合: header = FALSEを指定
- 読み込みたいcsvの1行目にヘッダーが含まれている場合: header = TRUEを指定
コード
以下のコードでcsvのデータを変数xにdata.frameとして取り込むことができます。
# ヘッダーが含まれていない場合 x <- read.csv("data1,csv") # ヘッダーが含まれている場合 x <- read.csv("data2,csv", header = TRUE)
read_csv()関数
read_csv(file, col_names = TRUE)
read_csv()関数もこの2つの引数以外にもたくさんの引数で挙動を調整することができますが、ここでは最低限必要なこの2つの引数についてのみ紹介しています。read.csv()関数とread_csv()関数で、引数のfileは同じ意味ですし、headerとcol_namesも基本的には同じ意味です。ただ、headerはヘッダーがない場合がデフォルトであり、col_namesはヘッダーがある場合がデフォルトに設定されているので注意してください。
file
読み込みたいcsvファイル名
col_names
- 読み込みたいcsvの1行目にヘッダーが含まれていない場合: col_names = FALSEを指定
- 読み込みたいcsvの1行目にヘッダーが含まれている場合: col_names = TRUEを指定
コード
以下のコードでcsvのデータを変数xにtibbleとして取り込むことができます。tibbleはdata.frame型の拡張版でtidyverseではよく使われるデータ型です。
library(readr) # ヘッダーが含まれていない場合 x <- read_csv("data1,csv", col_names = FALSE) # ヘッダーが含まれている場合# ヘッダーが含まれている場合 x <- read_csv("data2,csv")
Excelファイル(xlsx)から読み込む
CRANでExcel, xlsxを調べると、openxlsx, xlsx, readxlなどのパッケージが見つかりますが、ここではtidyverseに含まれるreadxlパッケージを使った方法について紹介します。Excelファイルの読み込みはread_xlsx()関数を使います。
read_xlsx(path, sheet = NULL, range = NULL, col_names = TRUE)
path
Excelファイル(xlsx)のパス(ファイル名)
sheet
名前または数字。値が指定されていなければ、1つ目のシートを読み込む。値が指定されていれば、対応するシートが読み込まれる。
range
読み込むセルの範囲(”B3:D87″, “Budget!B2:G14″など)。セルの範囲にSheet名が含まれる場合は、引数sheetの値は無視される。
col_names
- 読み込みたいcsvの1行目にヘッダーが含まれていない場合: col_names = FALSEを指定
- 読み込みたいcsvの1行目にヘッダーが含まれている場合: col_names = TRUEを指定
コード
以下のコードでExcelファイル(xlsx)のデータを変数xにtibbleとして取り込むことができます。tibbleはdata.frame型の拡張版でtidyverseではよく使われるデータ型です。
library(readxl) x <- read_xlsx(path = "data_with_header.xlsx", sheet = 2, range = "A1:B13")
まとめ
ExcelファイルからRに読み込む3つの方法について紹介しました。個人的には、以下のように使い分けています。
- クリップボードを経由
使い捨てのコード - csvから読み込む方法
この方法が中心。read.csvからread_csvへの移行中。 - Excelから直接読み込む方法
Excelは簡単に書き換えることができるので、データの管理が難しいように感じています。ですから、Excelから読み込む方法は、他の人とのやり取りの中でcsvでもよかったのにExcelファイルでやり取りしたというような場合のみに限定しています(その場合でもcsvに変換することの方が多いです。ほんとに使うのはタイムスタンプをきちんと残したい時くらいかな)。
ExcelのデータをRに読み込んだら、次はでデータ解析。ExcelでやってたことをRでもやりたい。そんな時、わざわざExcelに戻って作業なんて、イヤですよね。ExcelでやっていたことをRでやるには、こちら。