<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Excel on Marketechlabo</title><link>https://www.marketechlabo.com/tags/excel/</link><description>Recent content in Excel on Marketechlabo</description><generator>Hugo -- gohugo.io</generator><language>ja-jp</language><lastBuildDate>Thu, 17 May 2018 00:00:00 +0900</lastBuildDate><atom:link href="https://www.marketechlabo.com/tags/excel/index.xml" rel="self" type="application/rss+xml"/><item><title>RとExcel（ファイルの読み書き、データフレームをExcelで編集）</title><link>https://www.marketechlabo.com/r/r-openxlsx/</link><pubDate>Thu, 17 May 2018 00:00:00 +0900</pubDate><guid>https://www.marketechlabo.com/r/r-openxlsx/</guid><description>
&lt;p&gt;RでExcelファイル（.xlsx）を読み書きするライブラリはいくつかあるが、openxlsxが多機能でかつ使いやすい。Javaも不要なのでインストールや動作も軽い。古いファイル（.xls）には非対応だが、現行のファイル（.xlsx）のみ対応でよければこれがおすすめ。&lt;/p&gt;
&lt;h2 id="excelファイルの読み込み"&gt;Excelファイルの読み込み&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;read.xlsx()&lt;/code&gt;関数を使う。
たとえばファイル&lt;code&gt;C:/Users/fukuyama/Documents/master.xlsx&lt;/code&gt;のシート「ユーザ」を読み込む場合&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-r" data-lang="r"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;m_user.df &lt;span style="color:#f92672"&gt;&amp;lt;-&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;read.xlsx&lt;/span&gt;(&lt;span style="color:#e6db74"&gt;&amp;#39;C:/Users/fukuyama/Documents/master.xlsx&amp;#39;&lt;/span&gt;, na.strings &lt;span style="color:#f92672"&gt;=&lt;/span&gt; &lt;span style="color:#e6db74"&gt;&amp;#39;&amp;#39;&lt;/span&gt;, sheet &lt;span style="color:#f92672"&gt;=&lt;/span&gt; &lt;span style="color:#e6db74"&gt;&amp;#39;ユーザ&amp;#39;&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;code&gt;na.strings&lt;/code&gt;を指定しないと「&lt;code&gt;NA&lt;/code&gt;」という文字列を欠損値扱いする。基本的にはいつも空文字を欠損値扱いするようにしておいたほうが安全である。&lt;/p&gt;
&lt;h2 id="excelファイル書き出し"&gt;Excelファイル書き出し&lt;/h2&gt;
&lt;h3 id="単純にテーブルをそのまま出力するだけ"&gt;単純にテーブルをそのまま出力するだけ&lt;/h3&gt;
&lt;p&gt;書式など細かいカスタマイズをせず、単にテーブルを出力するだけであれば&lt;code&gt;write.xlsx()&lt;/code&gt;関数を使えばいい。
出力したxlsxファイルを開くのが&lt;code&gt;openXL()&lt;/code&gt;関数である。
複数のテーブルをシート別にまとめて1個のファイルで出力し、それを開く場合&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-r" data-lang="r"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#a6e22e"&gt;list&lt;/span&gt;(
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#e6db74"&gt;&amp;#39;IRIS&amp;#39;&lt;/span&gt; &lt;span style="color:#f92672"&gt;=&lt;/span&gt; iris,
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#e6db74"&gt;&amp;#39;CO2&amp;#39;&lt;/span&gt; &lt;span style="color:#f92672"&gt;=&lt;/span&gt; CO2,
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#e6db74"&gt;&amp;#39;USArrests&amp;#39;&lt;/span&gt; &lt;span style="color:#f92672"&gt;=&lt;/span&gt; USArrests
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;) &lt;span style="color:#f92672"&gt;|&amp;gt;&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;write.xlsx&lt;/span&gt;(file &lt;span style="color:#f92672"&gt;=&lt;/span&gt; &lt;span style="color:#e6db74"&gt;&amp;#39;data.xlsx&amp;#39;&lt;/span&gt;, rowNames &lt;span style="color:#f92672"&gt;=&lt;/span&gt; F)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#a6e22e"&gt;openXL&lt;/span&gt;(&lt;span style="color:#e6db74"&gt;&amp;#39;data.xlsx&amp;#39;&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;ul&gt;
&lt;li&gt;ヘッダ &lt;code&gt;colNames = T/F&lt;/code&gt;&lt;br&gt;
デフォルトでヘッダあり、&lt;code&gt;colNames=F&lt;/code&gt;でヘッダなし。&lt;/li&gt;
&lt;li&gt;行番号 &lt;code&gt;rowNames = T/F&lt;/code&gt;
デフォルトで行番号の列なし、&lt;code&gt;rowNames=T&lt;/code&gt;で行番号を付ける。&lt;/li&gt;
&lt;li&gt;フィルタ &lt;code&gt;withFilter= T/F&lt;/code&gt;
デフォルトでフィルタは付けない。&lt;code&gt;withFilter=T&lt;/code&gt;でフィルタを付ける。&lt;/li&gt;
&lt;li&gt;Excelのテーブルフォーマットにする &lt;code&gt;asTable = T/F&lt;/code&gt;&lt;br&gt;
デフォルトではテーブルフォーマットにしないが、&lt;code&gt;asTable=T&lt;/code&gt;でテーブルにする。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;パイプでまとめてこういう使い方もできる。&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-r" data-lang="r"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;mail_delivery.dt &lt;span style="color:#f92672"&gt;|&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#a6e22e"&gt;lazy_dt&lt;/span&gt;() &lt;span style="color:#f92672"&gt;|&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#a6e22e"&gt;group_by&lt;/span&gt;(segment_id) &lt;span style="color:#f92672"&gt;|&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#a6e22e"&gt;summarise&lt;/span&gt;(
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; n &lt;span style="color:#f92672"&gt;=&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;n&lt;/span&gt;(),
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; n_open &lt;span style="color:#f92672"&gt;=&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;sum&lt;/span&gt;(&lt;span style="color:#f92672"&gt;!&lt;/span&gt;&lt;span style="color:#a6e22e"&gt;is.na&lt;/span&gt;(datetime_open)),
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; n_click &lt;span style="color:#f92672"&gt;=&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;sum&lt;/span&gt;(&lt;span style="color:#f92672"&gt;!&lt;/span&gt;&lt;span style="color:#a6e22e"&gt;is.na&lt;/span&gt;(datetime_click))
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; ) &lt;span style="color:#f92672"&gt;|&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#a6e22e"&gt;write.xlsx&lt;/span&gt;(&lt;span style="color:#e6db74"&gt;&amp;#39;mail_response.xlsx&amp;#39;&lt;/span&gt;) &lt;span style="color:#f92672"&gt;|&amp;gt;&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;openXL&lt;/span&gt;()
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;書き込むと同時にファイルを開く。
回帰分析の結果も&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-r" data-lang="r"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#a6e22e"&gt;write.xlsx&lt;/span&gt;(mail.glm, file &lt;span style="color:#f92672"&gt;=&lt;/span&gt; &lt;span style="color:#e6db74"&gt;&amp;#39;mail_regression.xlsx&amp;#39;&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;いくつかの分析結果オブジェクトを直接Excelファイルにすることができる。&lt;/p&gt;
&lt;h3 id="書式などを指定して出力する"&gt;書式などを指定して出力する&lt;/h3&gt;
&lt;p&gt;書式などを細かく指定するなら&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;code&gt;createWorkbook()&lt;/code&gt;でワークブックインスタンスを作り&lt;/li&gt;
&lt;li&gt;&lt;code&gt;addWorksheet()&lt;/code&gt;でシートを作り&lt;/li&gt;
&lt;li&gt;&lt;code&gt;writeData()&lt;/code&gt;でデータを出力し&lt;/li&gt;
&lt;li&gt;&lt;code&gt;addStyle()&lt;/code&gt;などで書式を設定し&lt;/li&gt;
&lt;li&gt;&lt;code&gt;saveWorkbook()&lt;/code&gt;で書き込みコミットする&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-r" data-lang="r"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;# ワークブックインスタンスの生成&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;wb &lt;span style="color:#f92672"&gt;&amp;lt;-&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;createWorkbook&lt;/span&gt;()
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;# ワークシートの追加&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#a6e22e"&gt;addWorksheet&lt;/span&gt;(wb, &lt;span style="color:#e6db74"&gt;&amp;#39;カテゴリマスタ&amp;#39;&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#a6e22e"&gt;addWorksheet&lt;/span&gt;(wb, &lt;span style="color:#e6db74"&gt;&amp;#39;商品マスタ&amp;#39;&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#a6e22e"&gt;addWorksheet&lt;/span&gt;(wb, &lt;span style="color:#e6db74"&gt;&amp;#39;カテゴリ別新規購入率&amp;#39;&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#a6e22e"&gt;addWorksheet&lt;/span&gt;(wb, &lt;span style="color:#e6db74"&gt;&amp;#39;カテゴリ別リピート率&amp;#39;&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;# データの出力&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#a6e22e"&gt;writeData&lt;/span&gt;(wb, sheet &lt;span style="color:#f92672"&gt;=&lt;/span&gt; &lt;span style="color:#ae81ff"&gt;1&lt;/span&gt;, rowNames &lt;span style="color:#f92672"&gt;=&lt;/span&gt; T, category.dt)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#a6e22e"&gt;writeData&lt;/span&gt;(wb, sheet &lt;span style="color:#f92672"&gt;=&lt;/span&gt; &lt;span style="color:#ae81ff"&gt;2&lt;/span&gt;, rowNames &lt;span style="color:#f92672"&gt;=&lt;/span&gt; T, product.dt)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#a6e22e"&gt;writeData&lt;/span&gt;(wb, sheet &lt;span style="color:#f92672"&gt;=&lt;/span&gt; &lt;span style="color:#ae81ff"&gt;3&lt;/span&gt;, rowNames &lt;span style="color:#f92672"&gt;=&lt;/span&gt; T, new_purchase.dt)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#a6e22e"&gt;writeData&lt;/span&gt;(wb, sheet &lt;span style="color:#f92672"&gt;=&lt;/span&gt; &lt;span style="color:#ae81ff"&gt;4&lt;/span&gt;, rowNames &lt;span style="color:#f92672"&gt;=&lt;/span&gt; T, repeat.dt)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;# 書式（フォントサイズ、カラー、フォント名）&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#a6e22e"&gt;modifyBaseFont&lt;/span&gt;(wb, fontSize &lt;span style="color:#f92672"&gt;=&lt;/span&gt; &lt;span style="color:#ae81ff"&gt;11&lt;/span&gt;, fontColour &lt;span style="color:#f92672"&gt;=&lt;/span&gt; &lt;span style="color:#e6db74"&gt;&amp;#34;#000000&amp;#34;&lt;/span&gt;, fontName &lt;span style="color:#f92672"&gt;=&lt;/span&gt; &lt;span style="color:#e6db74"&gt;&amp;#34;MS PGothic&amp;#34;&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;# 条件付き書式&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;for&lt;/span&gt; (.i &lt;span style="color:#66d9ef"&gt;in&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;c&lt;/span&gt;(&lt;span style="color:#ae81ff"&gt;3&lt;/span&gt;,&lt;span style="color:#ae81ff"&gt;4&lt;/span&gt;)) {
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#75715e"&gt;# 範囲指定して値のフォーマットを指定&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#a6e22e"&gt;addStyle&lt;/span&gt;(wb, .i, cols&lt;span style="color:#f92672"&gt;=&lt;/span&gt;&lt;span style="color:#ae81ff"&gt;2&lt;/span&gt;&lt;span style="color:#f92672"&gt;:&lt;/span&gt;&lt;span style="color:#ae81ff"&gt;100&lt;/span&gt;, rows&lt;span style="color:#f92672"&gt;=&lt;/span&gt;&lt;span style="color:#ae81ff"&gt;2&lt;/span&gt;&lt;span style="color:#f92672"&gt;:&lt;/span&gt;&lt;span style="color:#ae81ff"&gt;100&lt;/span&gt;, gridExpand &lt;span style="color:#f92672"&gt;=&lt;/span&gt; T, style &lt;span style="color:#f92672"&gt;=&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;createStyle&lt;/span&gt;(numFmt &lt;span style="color:#f92672"&gt;=&lt;/span&gt; &lt;span style="color:#e6db74"&gt;&amp;#39;0.0%&amp;#39;&lt;/span&gt;))
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#75715e"&gt;# 条件付き書式&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#a6e22e"&gt;conditionalFormatting&lt;/span&gt;(wb, .i, cols&lt;span style="color:#f92672"&gt;=&lt;/span&gt;&lt;span style="color:#ae81ff"&gt;2&lt;/span&gt;&lt;span style="color:#f92672"&gt;:&lt;/span&gt;&lt;span style="color:#ae81ff"&gt;100&lt;/span&gt;, rows&lt;span style="color:#f92672"&gt;=&lt;/span&gt;&lt;span style="color:#ae81ff"&gt;2&lt;/span&gt;&lt;span style="color:#f92672"&gt;:&lt;/span&gt;&lt;span style="color:#ae81ff"&gt;100&lt;/span&gt;, rule&lt;span style="color:#f92672"&gt;=&lt;/span&gt;&lt;span style="color:#e6db74"&gt;&amp;#34;&amp;lt;0.01&amp;#34;&lt;/span&gt;, gridExpand &lt;span style="color:#f92672"&gt;=&lt;/span&gt; T, style &lt;span style="color:#f92672"&gt;=&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;createStyle&lt;/span&gt;(fontColour &lt;span style="color:#f92672"&gt;=&lt;/span&gt; &lt;span style="color:#e6db74"&gt;&amp;#34;#9C0006&amp;#34;&lt;/span&gt;, bgFill &lt;span style="color:#f92672"&gt;=&lt;/span&gt; &lt;span style="color:#e6db74"&gt;&amp;#34;#FFC7CE&amp;#34;&lt;/span&gt;))
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;# 保存&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#a6e22e"&gt;saveWorkbook&lt;/span&gt;(wb, &lt;span style="color:#e6db74"&gt;&amp;#34;products.xlsx&amp;#34;&lt;/span&gt;, overwrite &lt;span style="color:#f92672"&gt;=&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;TRUE&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="データをexcel上で編集する"&gt;データをExcel上で編集する&lt;/h2&gt;
&lt;p&gt;Excelファイルの入出力ではないが、Rのデータ（データフレームや行列）をExcel上で編集することができる。
表計算のグリッドが使えるので操作性は抜群。RのCUIの欠点であるデータが見づらい、編集しにくいという点を完全に補ってくれるので知っておくと大変便利。
パッケージ{XLConnect}をインストールして以下のコマンドを実行するだけ。XLConnectはJavaに依存しており、近年のRユーザ環境ではJavaのセットアップがハードルになることがある。&lt;/p&gt;</description></item></channel></rss>