stargazer 汇总表中的变量组标题

fme*_*out 5 latex r knitr stargazer

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

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

问题 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} 
Run Code Online (Sandbox Code Playgroud)

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

CL.*_*CL. 3

正如康拉德·鲁道夫所说,stargazer可能无法做到这一点。下面的解决方案使用xtable

\n\n
\\documentclass{article}\n\\usepackage{array}\n\n\\begin{document}\n\n<<results = "asis", echo = FALSE>>=\nlibrary(xtable)\n\ngroup1 <- data.frame(\n  name = c("v1", "v2"),\n  mean = 1:2, min = 3:4, max = 5:6,\n  stringsAsFactors = FALSE)\ngroup2 <- data.frame(\n  name = c("v3", "v4"),\n  mean = -(1:2), min = -(3:4), max = -(5:6),\n  stringsAsFactors = FALSE)\n\ndat <- rbind(\n  c("\\\\textbf{Group 1}", rep(NA, ncol(group1) - 1)),\n  group1,\n  c("\\\\textbf{Group 2}", rep(NA, ncol(group1) - 1)),\n  group2)\n\ncolnames(dat) <- sprintf("\\\\multicolumn{1}{c}{%s}", colnames(dat))\n\nprint.xtable(\n  xtable(dat,\n         caption = "Summary of Groups 1 and 2.",\n         align = c("l", "l", rep(">{$}r<{$}", 3))),\n  include.rownames = FALSE,\n  sanitize.text.function = identity,\n  sanitize.colnames.function = identity)\n@\n\\end{document}\n
Run Code Online (Sandbox Code Playgroud)\n\n

这个概念非常简单,但有一些怪癖需要考虑:

\n\n
    \n
  • 首先,我生成样本数据,假设有 2 个组,每个组有 2 个变量,每个变量有 3 个描述。
  • \n
  • 编辑组时rbind,只需插入标题行,将空列设置为NA。在字符串中使用 LaTeX 时,不要忘记使用双反斜杠。\\multicolumn(如果标题太宽则使用。)
  • \n
  • 由于第 2 至 4 列将设置为数学模式,因此我们必须确保列名称将打印为普通文本。“width-1-multicolumn”允许仅更改一个单元格的列类型,请参阅此处
  • \n
  • 使用align参数xtable指定列类型。在数学模式下,我们需要一列正常的左对齐列和三列右对齐列。要强制使用数学模式,请使用>{$}r<{$},请参阅此处。(还有一个额外的l\xe2\x80\x93 将被忽略,它用于行名称,我们将其隐藏。)
  • \n
  • 由于数据中有 LaTeX 标记,因此我们需要关闭 xtable 的清理程序。因此,设置sanitize.text.functionsanitize.colnames.functionidentity
  • \n
\n\n

结果:

\n\n

结果

\n