我希望使用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}
问题:如何在描述性表格中添加标题(空行)并仍然获得变量统计数据的数学模式输出?
答案 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}
这个概念非常简单,但有一些需要考虑的问题:
rbind
组时,只需为标题插入行,将空列设置为NA
。在字符串中使用LaTeX时,不要忘记加倍反斜杠。 (如果标题太宽,请使用\multicolumn
。)align
的{{1}}参数指定列类型。在数学模式中,我们需要一个正常的左对齐列和三个右对齐列。要强制数学模式,请使用xtable
,请参阅here。 (还有一个额外的>{$}r<{$}
将被忽略 - 它是我们隐藏的行名。)l
和sanitize.text.function
设置为sanitize.colnames.function
。 <强>结果:强>