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)
问题:如何在描述表中添加标题(空行)并仍然获得变量统计数据的数学模式输出?
正如康拉德·鲁道夫所说,stargazer可能无法做到这一点。下面的解决方案使用xtable:
\\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}\nRun Code Online (Sandbox Code Playgroud)\n\n这个概念非常简单,但有一些怪癖需要考虑:
\n\nrbind,只需插入标题行,将空列设置为NA。在字符串中使用 LaTeX 时,不要忘记使用双反斜杠。\\multicolumn(如果标题太宽则使用。)align参数xtable指定列类型。在数学模式下,我们需要一列正常的左对齐列和三列右对齐列。要强制使用数学模式,请使用>{$}r<{$},请参阅此处。(还有一个额外的l\xe2\x80\x93 将被忽略,它用于行名称,我们将其隐藏。)sanitize.text.function和sanitize.colnames.functionidentity。结果:
\n\n\n