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("&#12486;&#12473;&#12488;", 1:1000000),
                       Data1 = sample(1:500, 1000000, replace = TRUE),
                       Data2 = sample(200:300, 1000000, replace = TRUE))
########

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

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

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

#############################################
###&#12456;&#12463;&#12475;&#12523;&#12501;&#12449;&#12452;&#12523;&#12398;&#35501;&#12415;&#36796;&#12415;:read.xlsx&#12467;&#12510;&#12531;&#12489;
#############################################
library("tcltk")
library("openxlsx")
#&#12501;&#12449;&#12452;&#12523;&#12434;&#36984;&#25246;
XLPath <- paste0(as.character(tkgetOpenFile(title = "&#12456;&#12463;&#12475;&#12523;&#12501;&#12449;&#12452;&#12523;&#12434;&#36984;&#25246;",
                                            filetypes = '{"&#12456;&#12463;&#12475;&#12523;&#12501;&#12449;&#12452;&#12523;" {"*.*"}}',
                                            initialfile = c("*.*"))))
#&#35501;&#12415;&#36796;&#12416;&#12471;&#12540;&#12488;&#12434;&#25351;&#23450;:sheet&#12458;&#12503;&#12471;&#12519;&#12531;
XLData <- read.xlsx(XLPath, sheet = 1)

##########################################################
###&#20316;&#26989;&#12501;&#12457;&#12523;&#12480;&#12395;&#12487;&#12540;&#12479;&#12434;xlsx&#12391;&#26360;&#12365;&#36796;&#12415;&#20986;&#21147;:write.xlsx&#12467;&#12510;&#12531;&#12489;
##########################################################
#&#12487;&#12540;&#12479;&#25968;1000000&#12434;&#20986;&#21147;
#&#12456;&#12463;&#12475;&#12523;&#12398;&#12486;&#12540;&#12502;&#12523;&#12473;&#12479;&#12452;&#12523;9&#12434;&#36969;&#24540;:asTable&#12458;&#12503;&#12471;&#12519;&#12531;
#&#26360;&#12365;&#36796;&#12415;&#20301;&#32622;&#12434;&#25351;&#23450;:xy&#12458;&#12503;&#12471;&#12519;&#12531;
system.time(write.xlsx(TestData, file = "TestData.xlsx", asTable = TRUE))
#&#32004;20MB&#12398;&#12456;&#12463;&#12475;&#12523;&#12501;&#12449;&#12452;&#12523;&#12364;&#20986;&#21147;&#12373;&#12428;&#12414;&#12377;
#CPU,&#12513;&#12514;&#12522;&#12395;&#12418;&#12424;&#12426;&#12414;&#12377;&#12364;&#20966;&#29702;&#26178;&#38291;&#12398;&#21442;&#32771;
&#12518;&#12540;&#12470;   &#12471;&#12473;&#12486;&#12512;       &#32076;&#36942;  
28.990      1.044     30.183

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

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

#&#12527;&#12540;&#12463;&#12502;&#12483;&#12463;&#12398;&#20316;&#25104;:createWorkbook&#12467;&#12510;&#12531;&#12489;
#&#20316;&#25104;&#32773;&#12398;&#35373;&#23450;:creator&#12458;&#12503;&#12471;&#12519;&#12531;
NewWb <- createWorkbook(creator = "&#12363;&#12425;&#12384;&#12395;&#12356;&#12356;&#12418;&#12398;")

#&#12471;&#12540;&#12488;&#12398;&#36861;&#21152;:addWorksheet&#12467;&#12510;&#12531;&#12489;
#&#26528;&#32218;&#12398;&#26377;&#28961;:gridLines&#12458;&#12503;&#12471;&#12519;&#12531;
#&#12471;&#12540;&#12488;&#21517;&#12399;&#26085;&#26412;&#35486;&#12418;&#21487;&#33021;&#12391;&#12377;
addWorksheet(wb = NewWb, sheetName = "Karada", gridLines = FALSE)
addWorksheet(wb = NewWb, sheetName = "&#12356;&#12356;&#12418;&#12398;", gridLines = TRUE)

#&#12487;&#12540;&#12479;&#12398;&#26360;&#12365;&#36796;&#12415;:writeData&#12467;&#12510;&#12531;&#12489;
writeData(wb = NewWb, sheet = "Karada", x = TestData, startCol = 4, startRow = 4)

#&#12487;&#12540;&#12479;&#12434;&#12486;&#12540;&#12502;&#12523;&#24418;&#24335;&#12391;&#12471;&#12540;&#12488;&#12395;&#26360;&#12365;&#36796;&#12416;:writeDataTable&#12467;&#12510;&#12531;&#12489;
#&#12486;&#12540;&#12502;&#12523;&#20307;&#35009;&#12434;&#35373;&#23450;:tableStyle&#12458;&#12503;&#12471;&#12519;&#12531;;&#12473;&#12479;&#12452;&#12523;&#21517;&#12399;&#12456;&#12463;&#12475;&#12523;&#12434;&#21442;&#29031;
writeDataTable(wb = NewWb, sheet = "&#12356;&#12356;&#12418;&#12398;", x = TestData, startCol = 4, startRow = 4,
               tableStyle = "TableStyleLight9")

#&#12471;&#12540;&#12488;&#21517;"Karada"&#12398;&#20307;&#35009;&#12434;&#35519;&#25972;
#&#34892;&#21015;&#12398;&#22266;&#23450;:freezePane&#12467;&#12510;&#12531;&#12489;
freezePane(wb = NewWb, sheet = "Karada", firstRow = FALSE, firstCol = FALSE,
           firstActiveRow = 5, firstActiveCol = 5)

#&#21015;&#12398;&#24133;&#12434;&#25351;&#23450;:setColWidths&#12467;&#12510;&#12531;&#12489;
setColWidths(wb = NewWb, sheet = "Karada", cols = 4, widths = "auto")

#&#20316;&#25104;&#12375;&#12383;&#12527;&#12540;&#12463;&#12502;&#12483;&#12463;&#12434;&#12456;&#12463;&#12475;&#12523;&#12391;&#30906;&#35469;&#12377;&#12427;:openXL&#12467;&#12510;&#12531;&#12489;
#&#12456;&#12463;&#12475;&#12523;&#12364;&#12452;&#12531;&#12473;&#12488;&#12540;&#12523;&#12373;&#12428;&#12390;&#12356;&#12427;&#24517;&#35201;&#12364;&#12354;&#12426;&#12414;&#12377;
#&#12456;&#12463;&#12475;&#12523;&#12363;&#12425;&#20445;&#23384;&#12391;&#12365;&#12414;&#12377;
openXL(NewWb)

#&#12527;&#12540;&#12463;&#12502;&#12483;&#12463;&#12434;&#20316;&#26989;&#12487;&#12451;&#12524;&#12463;&#12488;&#12522;&#12395;&#20445;&#23384;:saveWorkbook&#12467;&#12510;&#12531;&#12489;
saveWorkbook(wb = NewWb, "Test.xlsx", overwrite = TRUE)

出力例

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

NewWb

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

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