在观星者汇总表中的变量组标题

时间:2016-08-12 14:43:06

标签: r latex knitr stargazer

我希望使用knitr和(理想情况下)stargazer自动生成带有变量组标题的描述性表格。由于我需要加权描述,我不使用stargazer的内置汇总函数,而是生成包含统计信息的数据帧,并使用summary=FALSE参数打印数据帧。

问题1:变量和标题为行且汇总统计为列的df不起作用,因为stargazer将标题行上的NA转换为$$ s,这打破了编织过程

问题2:作为一种解决方法,我生成了一个数据框,其中变量和标题为列,摘要统计为行,并使用flip=TRUE参数在stargazer输出中翻转行和列。虽然这允许我为标题和变量的数字向量添加空字符向量,但是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} 

问题:如何在描述性表格中添加标题(空行)并仍然获得变量统计数据的数学模式输出?

1 个答案:

答案 0 :(得分: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时,不要忘记加倍反斜杠。 (如果标题太宽,请使用\multicolumn。)
  • 由于第2列到第4列将在数学模式中设置,我们必须确保列名称将作为普通文本打印。 A&#34; width-1-multicolumn&#34;允许仅更改一个单元格的列类型,请参阅here
  • 使用align的{​​{1}}参数指定列类型。在数学模式中,我们需要一个正常的左对齐列和三个右对齐列。要强制数学模式,请使用xtable,请参阅here。 (还有一个额外的>{$}r<{$}将被忽略 - 它是我们隐藏的行名。)
  • 由于我们在数据中有LaTeX标记,我们需要关闭xtable的消毒剂。因此,请将lsanitize.text.function设置为sanitize.colnames.function

<强>结果:

Result