2016-08-12 3 views
4

knitrと(理想的には)スタルマジャーを使用して、変数グループの見出しを含む記述テーブルの生成を自動化したいと考えています。重み付けされた記述が必要なので、私はstargazerに組み込まれた要約関数を使用せず、統計を含むデータフレームを生成し、summary=FALSE引数を使用してデータフレームを印刷します。スタルマジャーサマリーテーブルの変数グループ見出し

問題1:stargazerが見出し行のNAをニットプロセスを中断する$$に変換するため、変数と見出しが行で、集計統計が列であるdfが機能しません。

問題2:回避策として、変数と見出しを列に、見出しを行に、統計データを行として生成し、flip=TRUE引数を使用して、stargazerの出力に行と列を反転させます。これにより、変数の見出しと数値ベクトルに空の文字ベクトルを持たせることができますが、視覚効果は数値モードでは出力されませんが、文字として扱われます。

例:

# create example df 
df <- data.frame(heading=c(" "," "," "),var1=c(1,2,3),var2=c(4,5,6)) 
df$heading <- as.character(df$heading) 

# output using stargazer 
stargazer(df, summary = FALSE, flip = TRUE) 

% Table created by stargazer v.5.2 by Marek Hlavac, Harvard University. E-mail: hlavac at fas.harvard.edu 
% Date and time: Fri, Aug 12, 2016 - 10:39:01 
\begin{table}[!htbp] \centering 
    \caption{} 
    \label{} 
\begin{tabular}{@{\extracolsep{5pt}} cccc} 
\\[-1.8ex]\hline 
\hline \\[-1.8ex] 
& 1 & 2 & 3 \\ 
\hline \\[-1.8ex] 
heading & & & \\ 
var1 & 1 & 2 & 3 \\ 
var2 & 4 & 5 & 6 \\ 
\hline \\[-1.8ex] 
\end{tabular} 
\end{table} 

質問:私は、記述テーブルの見出し(空行)を追加し、まだ変数統計の数式モードの出力を得るにはどうすればよいですか?

+0

:特に、あなたがやりたいスターゲイザーを伝える方法はありません、あなたが結果を修正する必要があるだろうLaTeXコード。このパッケージを使用しないでください。例えば、Panderのような別のテーブルジェネレータを使用してください。 –

答えて

2

Konrad Rudolphで述べたように、stargazerはおそらくこれを行うことができません。以下の解決策ではなくxtableを使用しています。

\documentclass{article} 
\usepackage{array} 

\begin{document} 

<<results = "asis", echo = FALSE>>= 
library(xtable) 

group1 <- data.frame(
    name = c("v1", "v2"), 
    mean = 1:2, min = 3:4, max = 5:6, 
    stringsAsFactors = FALSE) 
group2 <- data.frame(
    name = c("v3", "v4"), 
    mean = -(1:2), min = -(3:4), max = -(5:6), 
    stringsAsFactors = FALSE) 

dat <- rbind(
    c("\\textbf{Group 1}", rep(NA, ncol(group1) - 1)), 
    group1, 
    c("\\textbf{Group 2}", rep(NA, ncol(group1) - 1)), 
    group2) 

colnames(dat) <- sprintf("\\multicolumn{1}{c}{%s}", colnames(dat)) 

print.xtable(
    xtable(dat, 
     caption = "Summary of Groups 1 and 2.", 
     align = c("l", "l", rep(">{$}r<{$}", 3))), 
    include.rownames = FALSE, 
    sanitize.text.function = identity, 
    sanitize.colnames.function = identity) 
@ 
\end{document} 

概念は非常に簡単ですが、考慮すべきいくつかの癖があります

  • まず、私は2つの変数との2グループを想定し、サンプルデータを生成します変数ごとに3つの記述があります。
  • グループをrbindにする場合は、見出しの行を挿入して、空の列をNAに設定します。 LaTeXを文字列で使うときは、バックスラッシュを二重にすることを忘れないでください。
  • カラム2〜4は数学モードに設定されているので、列名が通常のテキストとして印刷されるようにする必要があります。 「width-1-multicolumn」では、1つのセルだけの列タイプを変更できます。hereを参照してください。
  • xtableの引数alignを使用して列の種類を指定します。数学モードでは、通常の左揃えの列と右揃えの列が1つ必要です。数値モードを強制するには、>{$}r<{$}を使用してください。hereを参照してください。 (これには無視される追加のlがあります。これは行名のために隠しています)
  • データにLaTeXマークアップがあるので、xtableのサニタイザをオフにする必要があります。したがって、sanitize.text.functionsanitize.colnames.functionidentityと設定します。

結果:スターゲイザーは単に凶悪乳液を生成し、uncustomisableある

Result

+1

例の値が実際にはどうなるのか大好きです^^ – AlexR

+0

@AlexRええと...まず番号を作ってから、(任意の)ラベルを貼ることにしました。それほど巧妙ではない。 ;-) –

+0

これは、少なくとも私を笑顔にさせました:-) – AlexR

関連する問題