井出草平の研究ノート

summarytoolsの紹介[R]

cran.r-project.org

cran.r-project.org

www.rdocumentation.org

1. 概要

summarytoolsはデータ探索と簡単な報告を中心とした一貫した機能セットを提供する。その中核には以下の4つの関数が存在する:

関数説明
freq() 回数、比率、累積統計量、および欠損データの報告を特徴とする度数表

ctable() 離散変数/カテゴリー変数のペア間のクロス集計 (結合度数)。

descr() 数値データの記述統計 (単変量)。

dfSummary() すべての変数の型固有の情報を特徴とするデータ・フレーム・サマリー:単変量統計量および/または度数分布、棒グラフまたはヒストグラム、および欠損データのカウントと割合。素早く異常を検出し、一目で傾向を特定するのに非常に便利

2. 度数表: freq()

freq()関数は、計数、割合、欠損データ情報を含む度数表を生成する。
余談: このパッケージのアイデアは、ベースとなるRにこのような関数がなかったことに由来している。

freq(iris$Species, plain.ascii = FALSE, style = "rmarkdown")
  Freq % Valid % Valid Cum. % Total % Total Cum.
setosa 50 33.33 33.33 33.33 33.33
versicolor 50 33.33 66.67 33.33 66.67
virginica 50 33.33 100.00 33.33 100.00
\<NA> 0 0.00 100.00
Total 150 100.00 100.00 100.00 100.00

この最初の例では、plain.asciiとstyle引数が指定されている。しかし、st_options()を使ってこの文書に対してグローバルに定義したので、冗長であり、以後省略する(セクション16にこのヴィネットの設定の詳細な説明がある)。

2.1 欠落データ

summarytoolsの主な目的の1つは、さらなる分析のためのデータのクリーニングと準備を支援することである。しかし、状況によっては、欠損データに関する情報を必要としない(あるいは既に持っている)場合がある。report.nas = FALSEを使用すると、出力表は1行2列と小さくなる:

freq(iris$Species, report.nas = FALSE, headings = FALSE)
               Freq        %   % Cum.

      setosa     50    33.33    33.33
  versicolor     50    33.33    66.67
   virginica     50    33.33   100.00
       Total    150   100.00   100.00

headings = FALSE パラメーターは見出しセクションを抑制する。

2.2 最も単純な式 すべてのオプション要素を "オフ "にすることで、よりシンプルな表が出来上がる:

freq(iris$Species, 
     report.nas = FALSE, 
     totals     = FALSE, 
     cumul      = FALSE, 
     headings   = FALSE)
               Freq       %

      setosa     50   33.33
  versicolor     50   33.33
   virginica     50   33.33

出力はかなり簡略化されているが、構文はそうなっていない。Teslerの複雑さ保存の法則のおかげである!ありがたいことに、st_options()がみんなの好みにアコモデーションしてくれる(パッケージ・オプションのセクションを参照)。

2.3 一度に複数の度数表

データフレーム内のすべての変数の度数表を生成するために、lapply() を使用することができる(初期のバージョンでは必要であった)。しかし、freq() はデータフレームを主引数として受け取るので、これは必要ない。

freq(tobacco)
Variable(s) ignored: age, BMI, cigs.per.day
Frequencies  
tobacco$gender  
Type: Factor  

              Freq   % Valid   % Valid Cum.   % Total   % Total Cum.
----------- ------ --------- -------------- --------- --------------
          F    489     50.00          50.00     48.90          48.90
          M    489     50.00         100.00     48.90          97.80
       <NA>     22                               2.20         100.00
      Total   1000    100.00         100.00    100.00         100.00

tobacco$age.gr  
Type: Factor  

              Freq   % Valid   % Valid Cum.   % Total   % Total Cum.
----------- ------ --------- -------------- --------- --------------
      18-34    258     26.46          26.46     25.80          25.80
      35-50    241     24.72          51.18     24.10          49.90
      51-70    317     32.51          83.69     31.70          81.60
       71 +    159     16.31         100.00     15.90          97.50
       <NA>     25                               2.50         100.00
      Total   1000    100.00         100.00    100.00         100.00

tobacco$smoker  
Type: Factor  

              Freq   % Valid   % Valid Cum.   % Total   % Total Cum.
----------- ------ --------- -------------- --------- --------------
        Yes    298     29.80          29.80     29.80          29.80
         No    702     70.20         100.00     70.20         100.00
       <NA>      0                               0.00         100.00
      Total   1000    100.00         100.00    100.00         100.00

tobacco$diseased  
Type: Factor  

              Freq   % Valid   % Valid Cum.   % Total   % Total Cum.
----------- ------ --------- -------------- --------- --------------
        Yes    224     22.40          22.40     22.40          22.40
         No    776     77.60         100.00     77.60         100.00
       <NA>      0                               0.00         100.00
      Total   1000    100.00         100.00    100.00         100.00

tobacco$disease  
Type: Character  

                        Freq   % Valid   % Valid Cum.   % Total   % Total Cum.
--------------------- ------ --------- -------------- --------- --------------
               Cancer     34     15.32          15.32      3.40           3.40
          Cholesterol     21      9.46          24.77      2.10           5.50
             Diabetes     14      6.31          31.08      1.40           6.90
            Digestive     12      5.41          36.49      1.20           8.10
              Hearing     14      6.31          42.79      1.40           9.50
                Heart     20      9.01          51.80      2.00          11.50
         Hypertension     36     16.22          68.02      3.60          15.10
          Hypotension     11      4.95          72.97      1.10          16.20
      Musculoskeletal     19      8.56          81.53      1.90          18.10
         Neurological     10      4.50          86.04      1.00          19.10
                Other      2      0.90          86.94      0.20          19.30
            Pulmonary     20      9.01          95.95      2.00          21.30
               Vision      9      4.05         100.00      0.90          22.20
                 <NA>    778                              77.80         100.00
                Total   1000    100.00         100.00    100.00         100.00

tobacco$samp.wgts  
Type: Numeric  

                          Freq   % Valid   % Valid Cum.   % Total   % Total Cum.
----------------------- ------ --------- -------------- --------- --------------
      0.861423220973783    267     26.70          26.70     26.70          26.70
       1.04417670682731    249     24.90          51.60     24.90          51.60
       1.04938271604938    324     32.40          84.00     32.40          84.00
                 1.0625    160     16.00         100.00     16.00         100.00
                   <NA>      0                               0.00         100.00
                  Total   1000    100.00         100.00    100.00         100.00

結果が乱雑になるのを避けるため、25以上の明確な値を持つ数値列は無視される。このしきい値25は、st_options()を使って変更することができる。例えば、10に変更するには、st_options(freq.ignore.threshold = 10)を使う。

タバコのデータフレームはシミュレートされたデータを含み、パッケージに含まれている。もう1つのシミュレートされたデータフレームは試験だ。どちらもフランス語版(tabagisme, examens)がある。

2.4 度数表のサブセット化(フィルタリング)

rowsパラメータは、度数表をサブセットすることができる:

-行の出現順序でフィルタリングするには、数値ベクトルを使用します; rows = 1:10 は、最初の10個の値の度数のみを表示する。表示されない値の度数を考慮するために、"(Other) "行が自動的に追加されます。 -名前によって行をフィルタリングするには、次のいずれかを使用できる。 -- 保持したいすべての行名を指定する文字ベクトル。 -- 正規表現として使用される単一の文字列(このトピックの詳細については、?regexを参照)。

最も一般的な価値観を示す

orderパラメータとrowsパラメータを組み合わせることで、結果を簡単にフィルタリングして、例えば因子の中で最も一般的な5つの値を表示することができる:

freq(tobacco$disease, 
     order    = "freq",
     rows     = 1:5,
     headings = FALSE)
                     Freq   % Valid   % Valid Cum.   % Total   % Total Cum.
------------------ ------ --------- -------------- --------- --------------
      Hypertension     36     16.22          16.22      3.60           3.60
            Cancer     34     15.32          31.53      3.40           7.00
       Cholesterol     21      9.46          40.99      2.10           9.10
             Heart     20      9.01          50.00      2.00          11.10
         Pulmonary     20      9.01          59.01      2.00          13.10
           (Other)     91     40.99         100.00      9.10          22.20
              <NA>    778                              77.80         100.00
             Total   1000    100.00         100.00    100.00         100.00

freq "の代わりに"-freq "を使えば、順序を逆にし、頻度の低いものから高いものへとランク付けされた結果を得ることができる。

“(Other)”の行に注目。これは自動的に生成される。

2.5 折りたたみ可能なセクション

html 結果を生成する場合、collapse = TRUE 引数を print() または view() / stview()で使用し、折りたたみ可能なセクションを得る。

view(freq(tobacco), collapse = TRUE)

3. クロス集計: ctable()

ctable() は、カテゴリ変数のペアのクロス集計(結合度数)を生成する。

タバコのシミュレートデータフレームを用いて、2つのカテゴリー変数smokerとdiseasedをクロス集計する。

ctable(x = tobacco$smoker, 
       y = tobacco$diseased, 
       prop = "r")   # 行の比率を表示する
Cross-Tabulation, Row Proportions  
smoker * diseased  
Data Frame: tobacco  

-------- ---------- ------------- ------------- ---------------
           diseased           Yes            No           Total
  smoker                                                       
     Yes              125 (41.9%)   173 (58.1%)    298 (100.0%)
      No               99 (14.1%)   603 (85.9%)    702 (100.0%)
   Total              224 (22.4%)   776 (77.6%)   1000 (100.0%)
-------- ---------- ------------- ------------- ---------------

ご覧のように、マークダウンは複数行の表見出しを完全にサポートしていないため、panderはこの特殊なタイプの表を表示するためにできることを行う。より良い結果を得るためには、"render "メソッドが推奨され、次の例で使用される。

3.1 行、列、または全体の割合

行の比率はデフォルトで表示される。列または合計の比率を表示するには、それぞれ prop = "c" または prop = "t" を使用する。比率を完全に省略するには、prop = "n "を使用する。

3.2 最小限のクロス集計

with(tobacco, 
     print(ctable(x = smoker, 
                  y = diseased, 
                  prop     = 'n',
                  totals   = FALSE, 
                  headings = FALSE),
           method = "render")
)
diseased
smoker Yes No
Yes 125 173
No 99 603

Generated by summarytools 1.0.1 (R version 4.3.1)
2023-09-28

3.3 カイ二乗(𝛘2)、オッズ比、リスク比

カイ2乗統計量を表示するには、chisq = TRUEと設定する。2×2の表では、オッズ比とリスク比(相対リスクともいう)を表示するために、それぞれORとRRを使用する。これらはTRUEに設定でき、その場合は95%信頼区間が表示される; 異なる信頼水準を使用するには、例えばOR = .90を使用する。

library(magrittr)
tobacco %$%  # Acts like with(tobacco, ...)
  ctable(x = smoker, y = diseased,
         chisq = TRUE,
         OR    = TRUE,
         RR    = TRUE,
         headings = FALSE) %>%
  print(method = "render")
diseased
smoker Yes No Total
Yes 125 ( 41.9% ) 173 ( 58.1% ) 298 ( 100.0% )
No 99 ( 14.1% ) 603 ( 85.9% ) 702 ( 100.0% )
Total 224 ( 22.4% ) 776 ( 77.6% ) 1000 ( 100.0% )
 Χ2 = 91.7088   df = 1   p = .0000
O.R. (95% C.I.) = 4.40  (3.22 - 6.02)
R.R. (95% C.I.) = 2.97  (2.37 - 3.73)

Generated by summarytools 1.0.1 (R version 4.3.1)
2023-09-28

4. 記述統計量: descr()

descr()は、記述統計量/単変量統計量、すなわち一般的な中心傾向統計量と分散尺度を生成する。後者の場合、数値以外の列はすべて無視され、その旨のメッセージが表示される。

descr(iris)
Non-numerical variable(s) ignored: Species
Descriptive Statistics  
iris  
N: 150  

                    Petal.Length   Petal.Width   Sepal.Length   Sepal.Width
----------------- -------------- ------------- -------------- -------------
             Mean           3.76          1.20           5.84          3.06
          Std.Dev           1.77          0.76           0.83          0.44
              Min           1.00          0.10           4.30          2.00
               Q1           1.60          0.30           5.10          2.80
           Median           4.35          1.30           5.80          3.00
               Q3           5.10          1.80           6.40          3.30
              Max           6.90          2.50           7.90          4.40
              MAD           1.85          1.04           1.04          0.44
              IQR           3.50          1.50           1.30          0.50
               CV           0.47          0.64           0.14          0.14
         Skewness          -0.27         -0.10           0.31          0.31
      SE.Skewness           0.20          0.20           0.20          0.20
         Kurtosis          -1.42         -1.36          -0.61          0.14
          N.Valid         150.00        150.00         150.00        150.00
        Pct.Valid         100.00        100.00         100.00        100.00

変数型メッセージをオフにするには、silent = TRUEを使用する。このオプションはグローバルに設定することも可能で、ここではそれを行うので、このビネットの残りの部分では表示されない。

st_options(descr.silent = TRUE)

5. データフレームの要約: dfSummary()

dfSummary() は、データフレーム内のすべての変数の統計、度数、グラフを含む要約表を作成する。表示される情報は、型(文字、因子、数値、日付)に固有であり、明確な値の数によっても異なる。

RStudio のビューア(または他の IDE やターミナルウィンドウで作業している場合はデフォルトの Web ブラウザ)で結果を表示するには、view() 関数を使用するか、名前が競合する場合はその双子の stview() を使用する:

view(dfSummary(iris))

Viewer欄にHTMLで出力される

View() ではなく view() を使うように注意すること。後者を使用すると、結果がデータ・ビューワに表示されてしまいます。

また、パッケージがロードされる順番にも注意してください。一部のパッケージはview()を再定義してView() を指すようにする。これらのパッケージの後にsummarytoolsをロードすると、それ自身のview()が正しく動作するようになる。そうでなければ、stview()は常に確実な代替手段として存在する。

5.1 R Markdown文書でのdfSummary()の使用

RのMarkdownドキュメントでdfSummary()を使用する場合、マージンのオーバーフローを避けるために、一般的に1つか2つのカラムを除外するのが良いアイデアである。Valid列とMissing列は冗長なので、どちらか一方を削除すればよい。

dfSummary(tobacco, 
          plain.ascii  = FALSE, 
          style        = "grid", 
          graph.magnif = 0.75, 
          valid.col    = FALSE,
          tmp.img.dir  = "/tmp")
+----+---------------+--------------------------+---------------------+-------------------------+---------+
| No | Variable      | Stats / Values           | Freqs (% of Valid)  | Graph                   | Missing |
+====+===============+==========================+=====================+=========================+=========+
| 1  | gender\       | 1\. F\                   | 489 (50.0%)\        | ![](/tmp/ds0001.png)    | 22\     |
|    | [factor]      | 2\. M                    | 489 (50.0%)         |                         | (2.2%)  |
+----+---------------+--------------------------+---------------------+-------------------------+---------+
| 2  | age\          | Mean (sd) : 49.6 (18.3)\ | 63 distinct values  | ![](/tmp/ds0002.png)    | 25\     |
|    | [numeric]     | min < med < max:\        |                     |                         | (2.5%)  |
|    |               | 18 < 50 < 80\            |                     |                         |         |
|    |               | IQR (CV) : 32 (0.4)      |                     |                         |         |
+----+---------------+--------------------------+---------------------+-------------------------+---------+
| 3  | age.gr\       | 1\. 18-34\               | 258 (26.5%)\        | ![](/tmp/ds0003.png)    | 25\     |
|    | [factor]      | 2\. 35-50\               | 241 (24.7%)\        |                         | (2.5%)  |
|    |               | 3\. 51-70\               | 317 (32.5%)\        |                         |         |
|    |               | 4\. 71 +                 | 159 (16.3%)         |                         |         |
+----+---------------+--------------------------+---------------------+-------------------------+---------+
| 4  | BMI\          | Mean (sd) : 25.7 (4.5)\  | 974 distinct values | ![](/tmp/ds0004.png)    | 26\     |
|    | [numeric]     | min < med < max:\        |                     |                         | (2.6%)  |
|    |               | 8.8 < 25.6 < 39.4\       |                     |                         |         |
|    |               | IQR (CV) : 5.7 (0.2)     |                     |                         |         |
+----+---------------+--------------------------+---------------------+-------------------------+---------+
| 5  | smoker\       | 1\. Yes\                 | 298 (29.8%)\        | ![](/tmp/ds0005.png)    | 0\      |
|    | [factor]      | 2\. No                   | 702 (70.2%)         |                         | (0.0%)  |
+----+---------------+--------------------------+---------------------+-------------------------+---------+
| 6  | cigs.per.day\ | Mean (sd) : 6.8 (11.9)\  | 37 distinct values  | ![](/tmp/ds0006.png)    | 35\     |
|    | [numeric]     | min < med < max:\        |                     |                         | (3.5%)  |
|    |               | 0 < 0 < 40\              |                     |                         |         |
|    |               | IQR (CV) : 11 (1.8)      |                     |                         |         |
+----+---------------+--------------------------+---------------------+-------------------------+---------+
| 7  | diseased\     | 1\. Yes\                 | 224 (22.4%)\        | ![](/tmp/ds0007.png)    | 0\      |
|    | [factor]      | 2\. No                   | 776 (77.6%)         |                         | (0.0%)  |
+----+---------------+--------------------------+---------------------+-------------------------+---------+
| 8  | disease\      | 1\. Hypertension\        | 36 (16.2%)\         | ![](/tmp/ds0008.png)    | 778\    |
|    | [character]   | 2\. Cancer\              | 34 (15.3%)\         |                         | (77.8%) |
|    |               | 3\. Cholesterol\         | 21 ( 9.5%)\         |                         |         |
|    |               | 4\. Heart\               | 20 ( 9.0%)\         |                         |         |
|    |               | 5\. Pulmonary\           | 20 ( 9.0%)\         |                         |         |
|    |               | 6\. Musculoskeletal\     | 19 ( 8.6%)\         |                         |         |
|    |               | 7\. Diabetes\            | 14 ( 6.3%)\         |                         |         |
|    |               | 8\. Hearing\             | 14 ( 6.3%)\         |                         |         |
|    |               | 9\. Digestive\           | 12 ( 5.4%)\         |                         |         |
|    |               | 10\. Hypotension\        | 11 ( 5.0%)\         |                         |         |
|    |               | [ 3 others ]             | 21 ( 9.5%)          |                         |         |
+----+---------------+--------------------------+---------------------+-------------------------+---------+
| 9  | samp.wgts\    | Mean (sd) : 1 (0.1)\     | 0.86!: 267 (26.7%)\ | ![](/tmp/ds0009.png) \  | 0\      |
|    | [numeric]     | min < med < max:\        | 1.04!: 249 (24.9%)\ | \                       | (0.0%)  |
|    |               | 0.9 < 1 < 1.1\           | 1.05!: 324 (32.4%)\ |                         |         |
|    |               | IQR (CV) : 0.2 (0.1)     | 1.06!: 160 (16.0%)\ |                         |         |
|    |               |                          | ! rounded           |                         |         |
+----+---------------+--------------------------+---------------------+-------------------------+---------+

tmp.img.dirパラメータは、htmlレンダリングを除き、R MarkdownドキュメントでdfSummariesを生成する際には必須である。これについての説明は後述する。

警告チャンクオプションをFALSEに設定することで、警告を回避することができる。{r chunk_name, results="asis", warning=FALSE}.

5.2 オプションの統計

この機能はパッケージがリリースされて以来、何度か要望があったものである。バージョン1.0.0で導入され、Stats/Values列にどの統計量を表示するかをコントロールできるようになった。すなわち、IQR (CV)を表示する3行目は、Rで利用可能な統計量を表示するように変更することができる。この機能を使用するには、st_options()を使用して、次のようにdfSummary.custom.1および/またはdfSummary.custom.2を定義し、コードをexpression()内にカプセル化する:

st_options(
  dfSummary.custom.1 = 
    expression(
      paste(
        "Q1 - Q3 :",
        round(
          quantile(column_data, probs = .25, type = 2, 
                   names = FALSE, na.rm = TRUE), digits = 1
        ), " - ",
        round(
          quantile(column_data, probs = .75, type = 2, 
                   names = FALSE, na.rm = TRUE), digits = 1
        )
      )
    )
)

print(
  dfSummary(iris, 
            varnumbers   = FALSE,
            na.col       = FALSE,
            style        = "multiline",
            plain.ascii  = FALSE,
            headings     = FALSE,
            graph.magnif = .8),
  method = "render"
)

もしdfSummary.custom.1の代わりにdfSummary.custom.2を使用していたら、デフォルトのIQR(CV)行の下に4行目が追加されていただろう。

round()の代わりに、内部変数format_number()を使用することが可能であることに注意してほしい。このformat_number()は、指定されたすべての引数(四捨五入の桁数、小数点マーク、千の位マークなど)に従って数値がフォーマットされることを保証する。st_options("round.digits")の値を格納する内部変数round.digitsも使用できる。これは、デフォルトIQR (CV)がどのように定義されているかである - ここでは、最初のカスタムstatをデフォルト値に戻し、その定義を表示する(formatR::tidy_source()は、式をフォーマット/インデントするために使用される):

library(formatR)
st_options(dfSummary.custom.1 = "default")
formatR::tidy_source(
  text   = deparse(st_options("dfSummary.custom.1")),
  indent = 2,
  args.newline = TRUE
)
expression(
  paste(
    paste0(
      trs("iqr"),
      " (", trs("cv"),
      ") : "
    ),
    format_number(
      IQR(column_data, na.rm = TRUE),
      round.digits
    ),
    " (", format_number(
      sd(column_data, na.rm = TRUE)/mean(column_data, na.rm = TRUE),
      round.digits
    ),
    ")", collapse = "", sep = ""
  )
)

このパラメータを使用するすべての関数(Rの基本関数のほとんど)でna.rm = TRUEを指定することを忘れないでほしい。

5.3 その他の注目すべき機能

dfSummary()関数には、以下の機能もある。

  • 見出しセクションで重複レコードの数を報告する
  • UPC/EAN コード (バーコード番号) を検出し、それらに無関係な統計は計算しない。
  • 有効なアドレスと無効なアドレスの割合を合計すると 100%になることに注意して欲しい。重複の割合は独自に計算されるため、棒グラフ (html バージョン)ではこのカテゴリの棒グラフは別の色で表示される。
  • max.tbl.heightパラメータを使用することで、"windowed "結果を表示することができる;これは、分析されたデータフレームが多数の変数を持つ場合に特に便利である; 詳細はvignette("rmarkdown", package = "summarytools")を参照。

5.4 列の除外

ほとんどのカラムは関数のパラメータを使って除外することができるが、以下のシンタックスを使ってカラムを削除することも可能である(結果は示していない):

dfs <- dfSummary(iris)
dfs$Variable <- NULL # これは "Variable "カラムを削除する

6. グループ化された統計: stby()

最適な結果を生成するために、summarytoolsはベースとなるby()関数の独自のバージョンを持っています。これはstby()と呼ばれ、by()と全く同じように使用する:

(iris_stats_by_species <- stby(data      = iris, 
                               INDICES   = iris$Species, 
                               FUN       = descr, 
                               stats     = "common", 
                               transpose = TRUE))
Descriptive Statistics  
iris  
Group: Species = setosa  
N: 50  

                     Mean   Std.Dev    Min   Median    Max   N.Valid   Pct.Valid
------------------ ------ --------- ------ -------- ------ --------- -----------
      Petal.Length   1.46      0.17   1.00     1.50   1.90     50.00      100.00
       Petal.Width   0.25      0.11   0.10     0.20   0.60     50.00      100.00
      Sepal.Length   5.01      0.35   4.30     5.00   5.80     50.00      100.00
       Sepal.Width   3.43      0.38   2.30     3.40   4.40     50.00      100.00

Group: Species = versicolor  
N: 50  

                     Mean   Std.Dev    Min   Median    Max   N.Valid   Pct.Valid
------------------ ------ --------- ------ -------- ------ --------- -----------
      Petal.Length   4.26      0.47   3.00     4.35   5.10     50.00      100.00
       Petal.Width   1.33      0.20   1.00     1.30   1.80     50.00      100.00
      Sepal.Length   5.94      0.52   4.90     5.90   7.00     50.00      100.00
       Sepal.Width   2.77      0.31   2.00     2.80   3.40     50.00      100.00

Group: Species = virginica  
N: 50  

                     Mean   Std.Dev    Min   Median    Max   N.Valid   Pct.Valid
------------------ ------ --------- ------ -------- ------ --------- -----------
      Petal.Length   5.55      0.55   4.50     5.55   6.90     50.00      100.00
       Petal.Width   2.03      0.27   1.40     2.00   2.50     50.00      100.00
      Sepal.Length   6.59      0.64   4.90     6.50   7.90     50.00      100.00
       Sepal.Width   2.97      0.32   2.20     3.00   3.80     50.00      100.00

6.1 stby()によるdescr()の特殊ケース

stby()は、単一変数の分割グループ統計量を生成するために使用すると、一連の1列の表を表示する代わりに、すべてを1つの表にまとめる。

with(tobacco, 
     stby(data    = BMI, 
          INDICES = age.gr, 
          FUN     = descr,
          stats   = c("mean", "sd", "min", "med", "max"))
)
Descriptive Statistics  
BMI by age.gr  
Data Frame: tobacco  
N: 258  

                18-34   35-50   51-70    71 +
------------- ------- ------- ------- -------
         Mean   23.84   25.11   26.91   27.45
      Std.Dev    4.23    4.34    4.26    4.37
          Min    8.83   10.35    9.01   16.36
       Median   24.04   25.11   26.77   27.52
          Max   34.84   39.44   39.21   38.37

6.2 stby() と ctable() の併用

この組み合わせでは構文が少し難しいので、以下に例を示す:

stby(data    = list(x = tobacco$smoker, y = tobacco$diseased), 
     INDICES = tobacco$gender, 
     FUN     = ctable)

# or equivalently
with(tobacco, 
     stby(data    = list(x = smoker, y = diseased), 
          INDICES = gender, 
          FUN     = ctable))
Cross-Tabulation, Row Proportions  
smoker * diseased  
Data Frame: tobacco  
Group: gender = F  

-------- ---------- ------------- ------------- --------------
           diseased           Yes            No          Total
  smoker                                                      
     Yes               62 (42.2%)    85 (57.8%)   147 (100.0%)
      No               49 (14.3%)   293 (85.7%)   342 (100.0%)
   Total              111 (22.7%)   378 (77.3%)   489 (100.0%)
-------- ---------- ------------- ------------- --------------

Group: gender = M  

-------- ---------- ------------- ------------- --------------
           diseased           Yes            No          Total
  smoker                                                      
     Yes               63 (44.1%)    80 (55.9%)   143 (100.0%)
      No               47 (13.6%)   299 (86.4%)   346 (100.0%)
   Total              110 (22.5%)   379 (77.5%)   489 (100.0%)
-------- ---------- ------------- ------------- --------------
Cross-Tabulation, Row Proportions  
smoker * diseased  
Data Frame: tobacco  
Group: gender = F  

-------- ---------- ------------- ------------- --------------
           diseased           Yes            No          Total
  smoker                                                      
     Yes               62 (42.2%)    85 (57.8%)   147 (100.0%)
      No               49 (14.3%)   293 (85.7%)   342 (100.0%)
   Total              111 (22.7%)   378 (77.3%)   489 (100.0%)
-------- ---------- ------------- ------------- --------------

Group: gender = M  

-------- ---------- ------------- ------------- --------------
           diseased           Yes            No          Total
  smoker                                                      
     Yes               63 (44.1%)    80 (55.9%)   143 (100.0%)
      No               47 (13.6%)   299 (86.4%)   346 (100.0%)
   Total              110 (22.5%)   379 (77.5%)   489 (100.0%)
-------- ---------- ------------- ------------- --------------

7. グループ化された統計: group_by()

freq()descr()、またはdfSummary()を使用してグループ化された統計量を作成するために、stby()の代替としてdplyrのgroup_by()を使用することが可能である。構文の違いはさておき、1つの重要な違いは、group_by()が、forcats::fct_explicit_naを使用して因数でNAを明示することを示唆する警告はあるものの、グループ化変数のNA値を有効なカテゴリとみなすことです。このアドバイスに従うと

library(dplyr)
tobacco$gender %<>% forcats::fct_explicit_na()
tobacco %>% 
  group_by(gender) %>% 
  descr(stats = "fivenum")
tobacco  
Group: gender = F  
N: 489  

                 age     BMI   cigs.per.day   samp.wgts
------------ ------- ------- -------------- -----------
         Min   18.00    9.01           0.00        0.86
          Q1   34.00   22.98           0.00        0.86
      Median   50.00   25.87           0.00        1.04
          Q3   66.00   29.48          10.50        1.05
         Max   80.00   39.44          40.00        1.06

Group: gender = M  
N: 489  

                 age     BMI   cigs.per.day   samp.wgts
------------ ------- ------- -------------- -----------
         Min   18.00    8.83           0.00        0.86
          Q1   34.00   22.52           0.00        0.86
      Median   49.50   25.14           0.00        1.04
          Q3   66.00   27.96          11.00        1.05
         Max   80.00   36.76          40.00        1.06

Group: gender = (Missing)  
N: 22  

                 age     BMI   cigs.per.day   samp.wgts
------------ ------- ------- -------------- -----------
         Min   19.00   20.24           0.00        0.86
          Q1   36.00   24.97           0.00        1.04
      Median   55.50   27.16           0.00        1.05
          Q3   64.00   30.23          10.00        1.05
         Max   80.00   32.43          28.00        1.06

8. 整頓されたテーブル : tb()

freq()またはdescr()テーブルを生成する際、tb()関数(tbをtibbleの短縮形と考える)を使用することで、結果を「整然とした」テーブルにすることが可能である。例えば

library(magrittr)
iris %>%
  descr(stats = "common") %>%
  tb()
# A tibble: 4 × 8
  variable      mean    sd   min   med   max n.valid pct.valid
  <chr>        <dbl> <dbl> <dbl> <dbl> <dbl>   <dbl>     <dbl>
1 Petal.Length  3.76 1.77    1    4.35   6.9     150       100
2 Petal.Width   1.20 0.762   0.1  1.3    2.5     150       100
3 Sepal.Length  5.84 0.828   4.3  5.8    7.9     150       100
4 Sepal.Width   3.06 0.436   2    3      4.4     150       100
iris$Species %>% 
  freq(cumul = FALSE, report.nas = FALSE) %>% 
  tb()
# A tibble: 3 × 3
  Species     freq   pct
  <fct>      <dbl> <dbl>
1 setosa        50  33.3
2 versicolor    50  33.3
3 virginica     50  33.3

定義により、合計行は整頓された表の一部ではなく、行名は通常の列に変換されます。

rmarkdownを使用してtibblesを表示する場合、knitrのチャンクオプションの結果を'asis'ではなく'markup'に設定する必要がある。

8.1 整然としたスプリット・グループ統計

stby()またはgroup_by()を使用して作成されたリストが、どのように整頓されたtibblesに変換されるかを示すいくつかの例を示します。

grouped_descr <- stby(data    = exams,
                      INDICES = exams$gender, 
                      FUN     = descr,
                      stats   = "common")

grouped_descr %>% tb()
# A tibble: 12 × 9
   gender variable   mean    sd   min   med   max n.valid pct.valid
   <fct>  <chr>     <dbl> <dbl> <dbl> <dbl> <dbl>   <dbl>     <dbl>
 1 Girl   economics  72.5  7.79  62.3  70.2  89.6      14      93.3
 2 Girl   english    73.9  9.41  58.3  71.8  93.1      14      93.3
 3 Girl   french     71.1 12.4   44.8  68.4  93.7      14      93.3
 4 Girl   geography  67.3  8.26  50.4  67.3  78.9      15     100  
 5 Girl   history    71.2  9.17  53.9  72.9  86.4      15     100  
 6 Girl   math       73.8  9.03  55.6  74.8  86.3      14      93.3
 7 Boy    economics  75.2  9.40  60.5  71.7  94.2      15     100  
 8 Boy    english    77.8  5.94  69.6  77.6  90.2      15     100  
 9 Boy    french     76.6  8.63  63.2  74.8  94.7      15     100  
10 Boy    geography  73   12.4   47.2  71.2  96.3      14      93.3
11 Boy    history    74.4 11.2   54.4  72.6  93.5      15     100  
12 Boy    math       73.3  9.68  60.5  72.2  93.2      14      93.3

orderパラメータは行の順序を制御する:

grouped_descr %>% tb(order = 2)
# A tibble: 12 × 9
   gender variable   mean    sd   min   med   max n.valid pct.valid
   <fct>  <chr>     <dbl> <dbl> <dbl> <dbl> <dbl>   <dbl>     <dbl>
 1 Girl   economics  72.5  7.79  62.3  70.2  89.6      14      93.3
 2 Boy    economics  75.2  9.40  60.5  71.7  94.2      15     100  
 3 Girl   english    73.9  9.41  58.3  71.8  93.1      14      93.3
 4 Boy    english    77.8  5.94  69.6  77.6  90.2      15     100  
 5 Girl   french     71.1 12.4   44.8  68.4  93.7      14      93.3
 6 Boy    french     76.6  8.63  63.2  74.8  94.7      15     100  
 7 Girl   geography  67.3  8.26  50.4  67.3  78.9      15     100  
 8 Boy    geography  73   12.4   47.2  71.2  96.3      14      93.3
 9 Girl   history    71.2  9.17  53.9  72.9  86.4      15     100  
10 Boy    history    74.4 11.2   54.4  72.6  93.5      15     100  
11 Girl   math       73.8  9.03  55.6  74.8  86.3      14      93.3
12 Boy    math       73.3  9.68  60.5  72.2  93.2      14      93.3

order = 3に設定すると、order = 2とまったく同じようにソート変数の順序が変わるが、列の順序も変わる:

grouped_descr %>% tb(order = 3)
# A tibble: 12 × 9
   variable  gender  mean    sd   min   med   max n.valid pct.valid
   <chr>     <fct>  <dbl> <dbl> <dbl> <dbl> <dbl>   <dbl>     <dbl>
 1 economics Girl    72.5  7.79  62.3  70.2  89.6      14      93.3
 2 economics Boy     75.2  9.40  60.5  71.7  94.2      15     100  
 3 english   Girl    73.9  9.41  58.3  71.8  93.1      14      93.3
 4 english   Boy     77.8  5.94  69.6  77.6  90.2      15     100  
 5 french    Girl    71.1 12.4   44.8  68.4  93.7      14      93.3
 6 french    Boy     76.6  8.63  63.2  74.8  94.7      15     100  
 7 geography Girl    67.3  8.26  50.4  67.3  78.9      15     100  
 8 geography Boy     73   12.4   47.2  71.2  96.3      14      93.3
 9 history   Girl    71.2  9.17  53.9  72.9  86.4      15     100  
10 history   Boy     74.4 11.2   54.4  72.6  93.5      15     100  
11 math      Girl    73.8  9.03  55.6  74.8  86.3      14      93.3
12 math      Boy     73.3  9.68  60.5  72.2  93.2      14      93.3

詳しくは、?tb参照のこと。

8.2 他のパッケージへの橋渡し

summarytoolsオブジェクトは、formattableやkableExtraのようなテーブルフォーマットに焦点を当てたパッケージとは必ずしも互換性があるとは限りません。しかしながら、tb()は、freq()descr()オブジェクトを、どのパッケージでも扱うことができる単純な表に変換する中間ステップである "ブリッジ "として使用することができる。以下は kableExtra を使った例である:

library(kableExtra)
library(magrittr)
stby(data    = iris, 
     INDICES = iris$Species, 
     FUN     = descr, 
     stats   = "fivenum") %>%
  tb(order = 3) %>%
  kable(format = "html", digits = 2) %>%
  collapse_rows(columns = 1, valign = "top")

9. ファイルへの出力

print()またはview()/stview()でfile引数を使用すると、html、Rmd、md、あるいは単なるプレーン・テキスト(txt)などのファイルに出力を書き出すことができる。ファイル拡張子は、書き出すコンテンツのタイプを決定するためにパッケージが使用する。

view(iris_stats_by_species, file = "~/iris_stats_by_species.html")
view(iris_stats_by_species, file = "~/iris_stats_by_species.md")

PDF文書に関する注意

summarytoolsでPDFファイルを作成する直接的な方法はありません。一つの方法は、htmlファイルを生成し、PandocまたはWKTOpdfを使用してPDFに変換することである(後者はdfSummary()出力でPandocより良い結果を与える)。

もう一つの方法は、PDFを出力フォーマットとしてRmdドキュメントを作成することです。進め方の詳細はvignette("rmarkdown", package = "summarytools")を参照してほしい。

9.1 出力ファイルの追加

append引数はsummarytoolsが生成した既存のファイルに内容を追加することができる。これは、1つのファイルに複数の統計表を含めたい場合に便利だ。これは、Rmdドキュメントを作成する迅速な代替方法である。

10. パッケージオプション

以下のオプションは st_options() でグローバルに設定できる:

10.1 一般オプション

Option name Default Note
style (1) “simple” .Rmd文書では "rmarkdown "に設定する
plain.ascii TRUE .Rmd文書ではFALSEに設定
round.digits (2) 2 表示する小数の数
headings TRUE 以前は "omit.headings"
footnote “default” カスタマイズするか、省略する場合はNAに設定
display.labels TRUE 見出しに変数/データフレームのラベルを表示する
bootstrap.css (3) TRUE html出力ファイルにBootstrap 4 CSSを含める
custom.css NA 独自のCSSファイルへのパス
escape.pipe FALSE いくつかのPandoc変換に便利
char.split (4) 12 列見出しの改行のしきい値
subtitle.emphasis TRUE 見出しフォーマットのコントロール
lang “en” 言語 (常に2文字の小文字)

1 独自の style オプションを持つ dfSummary() には適用さ れない (次の表を参照)。
2 独自の round.digits オプションを持つ ctable() には適用されない(次の表を参照)。
3 ShinyアプリではFALSEに設定。
4 descr()とctable()のhtml出力にのみ影響する。

10.2 機能別オプション

Option name Default Note
freq.cumul TRUE freq() で累積比率を表示する
freq.totals TRUE freq() で合計行を表示する
freq.report.nas TRUE 行と "有効な" 列を表示
freq.ignore.threshold (1) 25 無視するバーを決定するために使用
freq.silent FALSE コンソール・メッセージを隠す
ctable.prop “r” デフォルトで行の比率を表示
ctable.totals TRUE 限界合計の表示
ctable.round.digits 1 ctable() で表示する小数の数。
descr.stats “all” "fivenum"、"common" または統計のベクトル
descr.transpose FALSE 統計量を行ではなく列で表示する
descr.silent FALSE コンソール・メッセージの非表示
dfSummary.style “multiline” 代替として "grid "に設定可能
dfSummary.varnumbers TRUE 1列目に変数番号を表示
dfSummary.labels.col TRUE 変数ラベルがある場合は表示
dfSummary.graph.col TRUE グラフの表示
dfSummary.valid.col TRUE 有効列を出力に含める
dfSummary.na.col TRUE 出力に欠落列を含める
dfSummary.graph.magnif 1 棒グラフとヒストグラムの拡大率
dfSummary.silent FALSE コンソールメッセージの非表示
tmp.img.dir (2) NA 一時画像を保存するディレクト
use.x11 (3) TRUE Base64エンコードされたグラフの作成を許可する

1 詳細は2.3節を参照
2 dfSummary()にのみ適用されます。
3 テキストのみの環境では FALSE に設定する

st_options()                      # すべてのグローバルオプション値を表示する
st_options('round.digits')        # 特定のオプションの値を表示する
st_options(style = 'rmarkdown',   # 1つまたは複数のオプションの値を設定する
           footnote = NA)         # すべてのhtml出力の脚注をオフにする

11. フォーマット属性

summarytoolsオブジェクトが作成されるとき、そのフォーマット属性はその中に格納さ れる。しかし、print() または view() を使用するとき、それらのほとんどをオーバーライドできる。

11.1 関数固有の引数のオーバーライド

以下の表は、print() や view() で書式属性を上書きするために使用できる引数を示しています。ベースRのformat()関数の引数も使用することができる(ここにはリストされていないが)。

  1. pander オプション

11.2 見出しの内容を上書きする

見出し部分に表示される情報を変更するには、print() または view() で以下の引数を使用する:


次の例では、freq()オブジェクトを作成して表示し、それを再び表示して、今度はそのフォーマット属性の3つと見出し属性の1つをオーバーライドする。

(age_stats <- freq(tobacco$age.gr)) 
Frequencies  
tobacco$age.gr  
Type: Factor  

              Freq   % Valid   % Valid Cum.   % Total   % Total Cum.
----------- ------ --------- -------------- --------- --------------
      18-34    258     26.46          26.46     25.80          25.80
      35-50    241     24.72          51.18     24.10          49.90
      51-70    317     32.51          83.69     31.70          81.60
       71 +    159     16.31         100.00     15.90          97.50
       <NA>     25                               2.50         100.00
      Total   1000    100.00         100.00    100.00         100.00
print(age_stats,
      report.nas     = FALSE, 
      totals         = FALSE, 
      display.type   = FALSE,
      Variable.label = "Age Group")
Frequencies  
tobacco$age.gr  
Label: Age Group  

              Freq       %   % Cum.
----------- ------ ------- --------
      18-34    258   26.46    26.46
      35-50    241   24.72    51.18
      51-70    317   32.51    83.69
       71 +    159   16.31   100.00

11.3 パラメータ/オプションの優先順位

  • print() または view() パラメータが優先される(オーバーライド機能)。
  • freq() / ctable() / descr() / dfSummary() パラメータは 2 番目。
  • st_options() で設定されたグローバル・オプションは 3 番目に優先され、デフォルトとして動作する。

様々なパラメータ値の評価ロジックをまとめると、以下のようになる:

  • もし引数が関数呼び出しの中で明示的に供給されるなら、その引数はパラメータに格納されている値よりも優先される(格納されている値とは、summarytoolsのグローバルオプションリストに格納されている値と同様に、コア関数を使用するときにオブジェクトの属性に書き込まれる値である)。

  • コア関数とprintまたはview関数の両方が同時に呼び出され、相反するパラメータ値を持つ場合、print/viewが優先さ れる(それらは常に議論に勝つ!)。

  • 関数呼び出しでパラメータ値が見つからない場合、保存されているデフォルト値(st_options()で変更するか、パッケージ読み込み時のまま)が適用さ れる。

12. 見た目の微調整 : CSS

htmlレポートを作成する場合、デフォルトでBootstrapのCSSとsummarytools.cssの両方が含まれます。htmlコンテンツの見た目をよりコントロールするために、カスタムCSSファイルにクラス定義を追加することも可能だ。


dfSummary()を含む単純なhtmlレポートに、非常に小さなフォント・サイズを使用する必要があります。このために、以下のクラス定義を含む.cssファイル(任意の名前)を作成する:

.tiny-text {
  font-size: 8px;
}

次に、print()のcustom.css引数を使って、新しく作成したCSSファイルの場所を指定する(結果は示していない):

print(dfSummary(tobacco),
      custom.css    = 'path/to/custom.css', 
      table.classes = 'tiny-text',
      file          = "tiny-tobacco-dfSummary.html")

13. Shiny Apps

Shynyアプリにsummarytools関数をうまく組み込む、

  • htmlレンダリングを使用する
  • アプリのレイアウトとの相互作用を避けるために、bootstrap.css = FALSEを設定する。
  • 問題が発生した場合に備えて、headings = FALSEを設定する。
  • graph.magnifパラメータまたはdfSummary.graph.magnifグローバル・オプションでグラフ・サイズを調整する。
  • dfSummary()の表が広すぎる場合は、1列か2列を省略する(valid.colとvarnumbersなど)。
  • それでも満足のいく結果が得られない場合は、col.widths パラメータで列幅を手動で設定する。
  • col.widthsやgraph.magnigがうまくいかないようであれば、dfSummary()ではなく、print()のパラメータとして使用してみる。
print(dfSummary(somedata, 
                varnumbers   = FALSE, 
                valid.col    = FALSE, 
                graph.magnif = 0.8), 
      method   = 'render',
      headings = FALSE,
      bootstrap.css = FALSE)

14. Rマークダウンにおけるグラフ

マークダウン・スタイルを使用するRmdドキュメントでdfSummary()を使用する場合(htmlレンダリングとは対照的)、pngグラフを適切に表示するには3つの要素が必要:

1 - plain.asciiをFALSEに設定する。 2 - styleを "grid "に設定する。 3 - tmp.img.dirが定義され、幅が最大5文字であること。

バージョン0.9.9では、method = "render "を使用する場合、tmp.img.dirを設定する必要はなくなり、NAのままにしておくことができます。下図のように、一過性のマークダウン・テーブルを作成する場合にのみ定義する必要がある。レンダリングされる列の幅は、画像自体の幅ではなく、セル内の文字数によって決定されるためだ:

+---------------+--------|----------------------+---------+
| Variable      | stats  |  Graph               | Valid   |
+===============+========|======================+=========+
| age\          |  ...   | ![](/tmp/ds0001.png) | 978\    |
| [numeric]     |  ...   |                      | (97.8%) |
+---------------+--------+----------------------+---------+

CRANポリシーは、ユーザー・ディレクトリやRのテンポラリ・ゾーンの外側にコンテンツを書き込むことに関しては(正当な理由があって)本当に厳しい。そのため、ユーザーはこの一時的な場所を自分で設定する必要があり、Rのあらかじめ定義された一時的なゾーンの外にコンテンツを書き込むことに同意することになる。

Mac OSLinuxでは、"/tmp "を使うことは非常に理にかなっている。Windowsでは、そのような便利なディレクトリはないので、絶対パス("/tmp")か相対パス("img"、または単に".")を選ぶ必要がある。

15. 言語と用語のカスタマイズ

Rコミュニティの努力により、英語(デフォルト)の他に以下の言語が使用できる:

フランス語 (fr) ポルトガル語 (pt) ロシア語 (ru) スペイン語 (es) トルコ語 (tr) 言語を切り替えるには

st_options(lang = "fr")

コアファンクションからの出力はすべてこの言語を使用する:

freq(iris$Species)
Tableau de fréquences  
iris$Species  
Type: Facteur  

                   Fréq.   % Valide   % Valide cum.   % Total   % Total cum.
---------------- -------- ---------- --------------- --------- --------------
          setosa       50      33.33           33.33     33.33          33.33
      versicolor       50      33.33           66.67     33.33          66.67
       virginica       50      33.33          100.00     33.33         100.00
            <NA>        0                                 0.00         100.00
           Total      150     100.00          100.00    100.00         100.00

15.1 非UTF-8ロケール

ほとんどのWindowsシステムでは、文字セットがシステムのデフォルトロケールに含まれていない場合、ロケール設定のLC_CTYPE要素を変更する必要があります。例えば、"latin1 "環境でロシア語で良い結果を得るには、以下の設定を使用する:

Sys.setlocale("LC_CTYPE", "russian")
st_options(lang = 'ru')

デフォルト設定に戻すには

Sys.setlocale("LC_CTYPE", "")
st_options(lang = "en")

15.2 カスタム用語の定義と使用

use_custom_lang()関数を使用すると、独自の翻訳セットやパーソナライズされた用語を追加することができる。これを実現するには、csvテンプレートを取得し、1つ、多数、または+/- 70の用語のすべてをカスタマイズし、編集したcsvテンプレートへのパスを唯一の引数として与えて、use_custom_lang()を呼び出します。このようなカスタム言語設定は、Rのセッションをまたいでも保持されないことに注意して欲しい。つまり、このcsvファイルを常に手元に置いておく必要がある。

15.3 特定のキーワードだけを定義する

define_keywords()を使用すると、1つまたは少数の用語を簡単に変更できる。たとえば、freq() テーブルのタイトル行で、"Freq" ではなく "N" や "Count" を使用したい場合などである。あるいは、表のタイトルを見出しセクションとして使用するドキュメントを生成したいかもしれない。

この場合、define_keywords() を呼び出し、変更したい用語 (定義済みの変数に格納できる) を入力する。ここでは、freq.titleとfreq.titleを変更する:

section_title <- "**Species of Iris**"
define_keywords(title.freq = section_title,
                freq = "N")
freq(iris$Species)
**Species of Iris**  
iris$Species  
Type: Factor  

                     N   % Valid   % Valid Cum.   % Total   % Total Cum.
---------------- ----- --------- -------------- --------- --------------
          setosa    50     33.33          33.33     33.33          33.33
      versicolor    50     33.33          66.67     33.33          66.67
       virginica    50     33.33         100.00     33.33         100.00
            <NA>     0                               0.00         100.00
           Total   150    100.00         100.00    100.00         100.00

define_keywords()を引数なしで呼び出すと、グラフィカル・デバイスをサポートしているシステム(つまり大多数)では、ウィンドウが表示され、そこからすべての用語を編集することができる。

編集ウィンドウを閉じた後、ダイアログボックスが新しく作成したカスタム言語をcsvファイルに保存するオプションを提供します(いくつかのキーワードを変更しただけでも、パッケージは用語を全体として考慮します)。後でuse_custom_lang("path-to-custom-language-file.csv")を呼び出すことで、カスタム言語ファイルをメモリに再ロードすることができる。

パッケージ内のカスタマイズ可能なすべての用語のリストについては、?define_keywordsを参照してほしい。

すべての変更を元に戻すには、単純にst_options(lang = "en")を使用する。

15.4 見出しのパワー調整

print()関数に引数を追加することで、見出しをさらにカスタマイズすることができる。ここでは、Variableの値を上書きするために空の文字列を使用している;これは見出しの2行目を完全に消してしまう。

define_keywords(title.freq = "Types and Counts, Iris Flowers")
print(
  freq(iris$Species,
       display.type = FALSE), # Variable type won't be displayed...
  Variable = ""               # and neither will the variable name
  ) 
Types and Counts, Iris Flowers  

                     N   % Valid   % Valid Cum.   % Total   % Total Cum.
---------------- ----- --------- -------------- --------- --------------
          setosa    50     33.33          33.33     33.33          33.33
      versicolor    50     33.33          66.67     33.33          66.67
       virginica    50     33.33         100.00     33.33         100.00
            <NA>     0                               0.00         100.00
           Total   150    100.00         100.00    100.00         100.00

16. ヴィネット設定

このビネットがどのように設定されているかを知ることは、R Markdown文書でsummarytoolsを使い始めるのに役立つ。

16.1 YAMLセクション

出力要素が重要だ

---
output: 
 rmarkdown::html_vignette: 
   css:
   - !expr system.file("rmarkdown/templates/html_vignette/resources/vignette.css", package = "rmarkdown")
---

16.2 設定チャンク

library(knitr)
opts_chunk$set(results = 'asis',     # Can also be set at chunk level
              comment = NA,
              prompt  = FALSE,
              cache   = FALSE)
library(summarytools)
st_options(plain.ascii = FALSE,       # Always use in Rmd documents
           style       = "rmarkdown", # Always use in Rmd documents
           subtitle.emphasis = FALSE) # Improves layout w/ some themes

16.3 summarytoolsのCSSをインクルードする

必要なCSSは、file引数でprint()またはview()を使用して作成されたhtmlファイルに自動的に追加さ れる。しかし、R Markdownドキュメントでは、YAMLヘッダーの直後のセットアップチャンクで(またはknitrとsummarytoolsオプションを指定する最初のセットアップチャンクの後で)明示的に行う必要がある:




st_css(main = TRUE, global = TRUE)




17. 結論

このパッケージには何の保証もない。現在進行形であり、フィードバックはいつでも歓迎する。バグを見つけたり機能要望を出したい場合は、GitHubにissueを登録して欲しい。