Goro's blog

研究 / キャリア / 趣味 (主に自転車) について記事にしていきます

MENU

【便利】Rでエクセルファイル(.xlsx | .xls)の読み込み・書き出しをする方法

f:id:LPasteur:20200625002145j:plain


バイオ系博士学生のGoro (@BioDr_goro) です。

.xlsxファイルはopenxlsxパッケージを
.xlsファイルはgdataパッケージを使えば,
Rへエクセルファイルの読み込み・書き出しが可能になります。
使いやすいのはopenxlsxの方です。

openxlsxの公式ページはこちら。
openxlsx package | R Documentation

gdataのマニュアルはこちら。
gdata package | R Documentation



記述時の環境は以下の通りです。

  • macOS Catalina (ver. 10.15.5)
  • Rstudio ver. 3.6.2
  • openxlsx ver. 4.1.5
  • gdata ver. 2.18.0

.xlsxの読み込み,書き出し

openxlsxのパッケージをダウンロード

install.packages('openxlsx')
library(openxlsx)

?read.xlsxでヘルプを表示でき,基本的な引数の機能を参照できます。

data.frameとしてエクセルデータ (.xlsx) を読み込む

例として,以下のエクセルシートを読み込むとします。

f:id:LPasteur:20200624223504p:plain

df1 <- read.xlsx(path_to_file,
                sheet = "ABC", #読み込むシート名を指定できる。sheet = 1,のように番号でシートを指定することもできる。
                rowNames = TRUE, #一行目を行名として扱う
                colNames =TRUE, #一列目を列名として扱う
                detectDates = TRUE) #日時を認識する


RStudioへ読み込んだときの表示です。
f:id:LPasteur:20200624223718p:plain


sapply()でデータフレームの型を調べると,birthdayの列は"Date"になっていることが確かめられます。

sapply(df1, class)

f:id:LPasteur:20200624225015p:plain

特定の行列だけを読み込む

rowscolsを使います。

df2 <- read.xlsx(path_to_file,
                sheet = "ABC",
                rowNames = FALSE, colNames = TRUE,
                detectDates = TRUE,
                rows = c(1, 3, 5), cols = c(1, 3, 4))

f:id:LPasteur:20200624230722p:plain

シートの書き出し

wb <- createWorkbook()
addWorksheet(wb, 'ABC')
addWorksheet(wb, 'ABC_trimed')

writeData(wb,
                sheet = 'ABC',
                x = df1,
                withFilter = TRUE) #1行目にフィルターを付けられる
writeData(wb,
                sheet = 'ABC_trimed',
                x = df2,
                withFilter = TRUE)
saveWorkbook(wb,
                "wb.xlsx",
                overwrite = TRUE) #上書き保存したくなければ,overwirte = FALSEとする


f:id:LPasteur:20200624233823p:plain


書き出されたエクセルファイルのフォントはCalibri,フォントサイズは11です。

modifyBaseFont(wb,
                fontSize = 10,
                fontColour = "gray",
                fontName = "Arial")

とすれば,フォント,カラー,フォントサイズを変更できます。
日本語のフォント (MS Pゴシックなど) を指定すると,ファイルが壊れます。
カラーはカラーコードでも指定できます。

.xlsの読み込み,書き出し

gdataのパッケージをダウンロード

install.packages('gdata')
library(gdata)

?read.xlsx
でヘルプを表示できますが,openxlsxほどの情報量はありません…。

data.frameとしてエクセルデータ (.xls) を読み込む

エクセルシートの中身は.xlsxで用いたデータと同一とします。

df3 <- read.xls(path_to_file, sheet = "ABC")
sapply(df3, class)

f:id:LPasteur:20200625000220p:plain

openxlsxと比較すると使える引数が限定されているので不便です。
birthdayが"factor"として認識されてしまうのを回避する方法がわかりませんでした。