Rで解析:セル体裁!大きなデータも大丈夫!エクセル操作の「openxlsx」パッケージ

Rの解析に役に立つ記事

エクセルを操作するパッケージには「XLConnect」「WriteXLS」などがあります。でも、操作は楽だけれども少し大きなデータだとエラーが出たり、大きいデータを扱えるけど体裁コマンドがなかったり。そんな問題を解決出来るパッケージの紹介です。

作業効率に関わるので、好みにあったパッケージを利用してはいかがでしょうか。

パッケージバージョンは4.2.5。実行コマンドはwindows 11のR version 4.1.2で確認しています。

スポンサーリンク
スポンサーリンク

パッケージのインストール

下記、コマンドを実行してください。

#パッケージのインストール
install.packages("openxlsx")

データ例の作成

データ数1,000,000のデータを作成します。パソコン環境によってデータ数を調整してください。

###データ例の作成#####
#データ数1,000,000
TestData <- data.frame(Group = paste0("テスト", 1:1000000),
                       Data1 = sample(1:500, 1000000, replace = TRUE),
                       Data2 = sample(200:300, 1000000, replace = TRUE))
########

エクセルファイルの読み書き・体裁を整える

参考までにエクセルファイルへの書き込み・出力の処理時間を紹介します。また、openxlsxパッケージにはセルの体裁だけでなく、表示書式を管理するコマンドも収録されています。

詳細はコメント、パッケージのヘルプを確認してください。

#############################################
###エクセルファイルの読み込み:read.xlsxコマンド
#############################################
library("tcltk")
library("openxlsx")
#ファイルを選択
XLPath <- paste0(as.character(tkgetOpenFile(title = "エクセルファイルを選択",
                                            filetypes = '{"エクセルファイル" {"*.*"}}',
                                            initialfile = c("*.*"))))
#読み込むシートを指定:sheetオプション
XLData <- read.xlsx(XLPath, sheet = 1)

##########################################################
###作業フォルダにデータをxlsxで書き込み出力:write.xlsxコマンド
##########################################################
#データ数1000000を出力
#エクセルのテーブルスタイル9を適応:asTableオプション
#書き込み位置を指定:xyオプション
system.time(write.xlsx(TestData, file = "TestData.xlsx", asTable = TRUE))
#約20MBのエクセルファイルが出力されます
#CPU,メモリにもよりますが処理時間の参考
ユーザ   システム       経過  
28.990      1.044     30.183

シートが複数のエクセルファイルを作成する

ワークブックの作成、シートの追加、データの書き込み、行列の固定、列の幅に関するコマンドと作成した内容をエクセルを立ち上げて確認、作業フォルダにワークブックを保存するコマンドを紹介します。

#ワークブックの作成:createWorkbookコマンド
#作成者の設定:creatorオプション
NewWb <- createWorkbook(creator = "からだにいいもの")

#シートの追加:addWorksheetコマンド
#枠線の有無:gridLinesオプション
#シート名は日本語も可能です
addWorksheet(wb = NewWb, sheetName = "Karada", gridLines = FALSE)
addWorksheet(wb = NewWb, sheetName = "いいもの", gridLines = TRUE)

#データの書き込み:writeDataコマンド
writeData(wb = NewWb, sheet = "Karada", x = TestData, startCol = 4, startRow = 4)

#データをテーブル形式でシートに書き込む:writeDataTableコマンド
#テーブル体裁を設定:tableStyleオプション;スタイル名はエクセルを参照
writeDataTable(wb = NewWb, sheet = "いいもの", x = TestData, startCol = 4, startRow = 4,
               tableStyle = "TableStyleLight9")

#シート名"Karada"の体裁を調整
#行列の固定:freezePaneコマンド
freezePane(wb = NewWb, sheet = "Karada", firstRow = FALSE, firstCol = FALSE,
           firstActiveRow = 5, firstActiveCol = 5)

#列の幅を指定:setColWidthsコマンド
setColWidths(wb = NewWb, sheet = "Karada", cols = 4, widths = "auto")

#作成したワークブックをエクセルで確認する:openXLコマンド
#エクセルがインストールされている必要があります
#エクセルから保存できます
openXL(NewWb)

#ワークブックを作業ディレクトリに保存:saveWorkbookコマンド
saveWorkbook(wb = NewWb, "Test.xlsx", overwrite = TRUE)

出力例

・シートが複数あるエクセルファイルを作成するコマンド例

NewWb

少しでも、あなたの解析が楽になりますように!!

タイトルとURLをコピーしました