Rで解析:WordやPowerPointへ表を出力「flextable」パッケージ

Rの解析に役に立つ記事
スポンサーリンク

htmlだけでなくWordやPowerPointファイルへ表を出力できるパッケージの紹介です。WordやPowerPointへ出力した表は各ソフトウェア内で編集できるので大変便利なパッケージだと思います。

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

スポンサーリンク

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

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

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

コマンドの紹介

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

#パッケージの読み込み
library("flextable")
#officerパッケージがなければインストール
if(!require("officer", quietly = TRUE)){
  library("officer");require("officer")
}
#tidyverseパッケージがなければインストール
if(!require("tidyverse", quietly = TRUE)){
  install.packages("tidyverse");require("tidyverse")
}

###データ例の作成#####
n <- 5
TestData <- data.frame("SubGroup" = sample(c("KA", "RA", "DA"),
                                           n, replace = TRUE),
                       "ID" = sample(letters[1:24], n, replace = FALSE),
                       "Area" = 1:n, "Point" = 0.1:(0.1*n),
                       "Facet" = sample(letters[1:2], n, replace = TRUE))
########

#flextable&#12458;&#12502;&#12472;&#12455;&#12463;&#12488;&#12398;&#20316;&#25104;:regulartable&#12467;&#12510;&#12531;&#12489;
#&#34920;&#31034;&#21015;&#12434;&#25351;&#23450;:col_keys&#12458;&#12503;&#12471;&#12519;&#12531;
#&#12475;&#12523;&#24133;&#12434;&#25351;&#23450;:cwidth&#12458;&#12503;&#12471;&#12519;&#12531;
#&#12475;&#12523;&#39640;&#12373;&#12434;&#25351;&#23450;:cheight&#12458;&#12503;&#12471;&#12519;&#12531;
FtObject <- regulartable(data = TestData, col_keys = names(TestData),
                            cwidth = 0.75, cheight = 0.25)

#flextable&#12458;&#12502;&#12472;&#12455;&#12463;&#12488;&#12398;&#34920;&#31034;:print&#12467;&#12510;&#12531;&#12489;
#&#34920;&#31034;&#24418;&#24335;&#12434;&#25351;&#23450;:preview&#12458;&#12503;&#12471;&#12519;&#12531;;"html","pptx","docx"&#12363;&#12425;&#36984;&#25246;
print(FtObject, preview = "html")

#&#12486;&#12540;&#12510;&#12434;&#36969;&#29992;:theme_vanilla&#12467;&#12510;&#12531;&#12489;
#&#20182;&#12395;theme_booktabs,theme_box,theme_tron,theme_tron_legacy,theme_zebra&#12364;&#12354;&#12427;
VFtObject <- theme_vanilla(FtObject)
print(VFtObject, preview = "html")

#&#12475;&#12523;&#12434;&#22402;&#30452;&#26041;&#21521;&#12395;&#12464;&#12523;&#12540;&#12503;&#21270;&#12375;&#12390;&#34920;&#31034;:merge_v&#12467;&#12510;&#12531;&#12489;
MvVFtObject <- merge_v(VFtObject, j = "SubGroup")
print(MvVFtObject, preview = "html")

#&#12475;&#12523;&#12398;&#24133;&#39640;&#12373;&#12434;&#33258;&#21205;&#35519;&#25972;:autofit&#12467;&#12510;&#12531;&#12489;
FitMvVFtObject <- autofit(MvVFtObject)
print(FitMvVFtObject, preview = "html")

#&#12475;&#12523;&#32972;&#26223;&#33394;&#12434;&#25351;&#23450;:bg&#12467;&#12510;&#12531;&#12489;
#&#21015;&#20301;&#32622;&#12434;&#25351;&#23450;:i&#12458;&#12503;&#12471;&#12519;&#12531;
#&#34892;&#20301;&#32622;&#12434;&#25351;&#23450;:j&#12458;&#12503;&#12471;&#12519;&#12531;
#&#33394;&#12434;&#25351;&#23450;:bg&#12458;&#12503;&#12471;&#12519;&#12531;
#&#20301;&#32622;&#12391;&#25351;&#23450;:part&#12458;&#12503;&#12471;&#12519;&#12531;;"all","body","header"&#12363;&#12425;&#36984;&#25246;
BgFitMvVFtObject <- bg(FitMvVFtObject, i = c(3, 5), j = 2:4, bg = "red")
print(BgFitMvVFtObject, preview = "html")

#&#25991;&#23383;&#33394;&#12434;&#25351;&#23450;:color&#12467;&#12510;&#12531;&#12489;
#&#33394;&#12434;&#25351;&#23450;:color&#12458;&#12503;&#12471;&#12519;&#12531;
#&#12381;&#12398;&#20182;&#12458;&#12503;&#12471;&#12519;&#12531;&#12399;bg&#12467;&#12510;&#12531;&#12489;&#12392;&#20849;&#36890;
ColBgFitMvVFtObject <- color(BgFitMvVFtObject, i = 3, j = 2:4, color = "yellow")
print(ColBgFitMvVFtObject, preview = "html")

#&#32218;&#33394;&#12434;&#25351;&#23450;:border&#12467;&#12510;&#12531;&#12489;
#&#33394;&#12398;&#35373;&#23450;:border&#12458;&#12503;&#12471;&#12519;&#12531;;fp_border(color = &#33394;)&#12391;&#25351;&#23450;
#&#12381;&#12398;&#20182;&#12458;&#12503;&#12471;&#12519;&#12531;&#12399;bg&#12467;&#12510;&#12531;&#12489;&#12392;&#20849;&#36890;
BoColBgFitMvVFtObject <- border(ColBgFitMvVFtObject,
                                border = officer::fp_border(color = "green"),
                                part = "all")
print(BoColBgFitMvVFtObject, preview = "html")

#&#25991;&#23383;&#20301;&#32622;&#12434;&#25351;&#23450;:align&#12467;&#12510;&#12531;&#12489;
#&#20301;&#32622;&#12434;&#25351;&#23450;:align&#12458;&#12503;&#12471;&#12519;&#12531;;"left","right","center","justify"
#&#12381;&#12398;&#20182;&#12458;&#12503;&#12471;&#12519;&#12531;&#12399;bg&#12467;&#12510;&#12531;&#12489;&#12392;&#20849;&#36890;
AlignFtObject <- align(BoColBgFitMvVFtObject, align = "center", part = "all")
print(AlignFtObject, preview = "html")

#&#25991;&#23383;&#12469;&#12452;&#12474;&#12434;&#25351;&#23450;:fontsize&#12467;&#12510;&#12531;&#12489;
#&#25991;&#23383;&#12469;&#12452;&#12474;&#12434;&#25351;&#23450;:size&#12458;&#12503;&#12471;&#12519;&#12531;
#&#12381;&#12398;&#20182;&#12458;&#12503;&#12471;&#12519;&#12531;&#12399;bg&#12467;&#12510;&#12531;&#12489;&#12392;&#20849;&#36890;
SizeAlignFtObject <- fontsize(AlignFtObject, size = 9, part = "body")
print(SizeAlignFtObject, preview = "html")

#&#22826;&#25991;&#23383;&#25351;&#23450;:bold&#12467;&#12510;&#12531;&#12489;
BoldFtObject <- bold(SizeAlignFtObject, part = "header")
print(BoldFtObject, preview = "html")

#&#12452;&#12479;&#12522;&#12483;&#12463;:italic&#12467;&#12510;&#12531;&#12489;
ItaBoldFtObject <- italic(BoldFtObject, i = ~ Area > 3,
                             j = ~ Area, italic = TRUE)
print(ItaBoldFtObject, preview = "html")

#&#32057;&#20171;&#12467;&#12510;&#12531;&#12489;&#12434;&#19968;&#25324;&#36969;&#24540;&#12375;&#12390;Word&#12391;&#20986;&#21147;
#officer&#12497;&#12483;&#12465;&#12540;&#12472;:read_docx&#12467;&#12510;&#12531;&#12489;
#dplyr&#12497;&#12483;&#12465;&#12540;&#12472;:%>%&#12467;&#12510;&#12531;&#12489;
#flextable&#12497;&#12483;&#12465;&#12540;&#12472;:body_add_flextable&#12467;&#12510;&#12531;&#12489;
read_docx() %>%
  body_add_flextable(
    regulartable(data = TestData, col_keys = names(TestData),
                 cwidth = 0.75, cheight = 0.25) %>%
      theme_vanilla() %>%
      merge_v(j = "SubGroup") %>%
      autofit() %>%
      bg(i = c(3, 5), j = 2:4, bg = "red") %>%
      color(i = 3, j = 2:4, color = "yellow") %>%
      border(border = fp_border(color = "green"), part = "all") %>%
      align(align = "center", part = "all") %>%
      fontsize(size = 9, part = "body") %>%
      italic(i = ~ Area < 3, j = ~ Area, italic = TRUE)) %>%
  print(target = "Test.docx")

#&#32057;&#20171;&#12467;&#12510;&#12531;&#12489;&#12434;&#19968;&#25324;&#36969;&#24540;&#12375;&#12390;PowerPoint&#12391;&#20986;&#21147;
#officer&#12497;&#12483;&#12465;&#12540;&#12472;:read_pptx&#12467;&#12510;&#12531;&#12489;,add_slide&#12467;&#12510;&#12531;&#12489;
#dplyr&#12497;&#12483;&#12465;&#12540;&#12472;:%>%&#12467;&#12510;&#12531;&#12489;
#flextable&#12497;&#12483;&#12465;&#12540;&#12472;:ph_with&#12467;&#12510;&#12531;&#12489;
read_pptx() %>%
  add_slide(layout = "Title and Content", master = "Office Theme") %>%
  ph_with(location = ph_location(width = 1, height = 1,
                                 newlabel = "KARADAGOOD"),
    regulartable(data = TestData, col_keys = names(TestData),
                 cwidth = 0.75, cheight = 0.25) %>%
      theme_vanilla() %>%
      merge_v(j = "SubGroup") %>%
      autofit() %>%
      bg(i = c(3, 5), j = 2:4, bg = "red") %>%
      color(i = 3, j = 2:4, color = "yellow") %>%
      border(border = fp_border(color = "green"), part = "all") %>%
      align(align = "center", part = "all") %>%
      fontsize(size = 9, part = "body") %>%
      italic(i = ~ Area < 3, j = ~ Area, italic = TRUE)) %>%
  print(target = "Test.pptx")

出力例

・theme_vanillaコマンド

・merge_vコマンド

・紹介コマンドを全て適応


・Wordへ出力



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

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