バイオ系博士学生の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) を読み込む
例として,以下のエクセルシートを読み込むとします。
df1 <- read.xlsx(path_to_file, sheet = "ABC", #読み込むシート名を指定できる。sheet = 1,のように番号でシートを指定することもできる。 rowNames = TRUE, #一行目を行名として扱う colNames =TRUE, #一列目を列名として扱う detectDates = TRUE) #日時を認識する
RStudioへ読み込んだときの表示です。
sapply()でデータフレームの型を調べると,birthdayの列は"Date"になっていることが確かめられます。
sapply(df1, class)
特定の行列だけを読み込む
rowsとcolsを使います。
df2 <- read.xlsx(path_to_file, sheet = "ABC", rowNames = FALSE, colNames = TRUE, detectDates = TRUE, rows = c(1, 3, 5), cols = c(1, 3, 4))
シートの書き出し
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とする
書き出されたエクセルファイルのフォントは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)
openxlsxと比較すると使える引数が限定されているので不便です。
birthdayが"factor"として認識されてしまうのを回避する方法がわかりませんでした。