Как изменить имена столбцов в Stargazer при печати кадров данных?
Я пытаюсь вывести фрейм данных в латексе, используя пакет stargazer. Я хочу, чтобы имена столбцов включали латексный код, но stargazer не допускает латексный код внутри имен фреймов данных. Я также пытался использовать аргумент column.labels, но этот аргумент используется только для таблиц регрессии, а не для вывода фреймов данных. Вот два подхода, которые я попробовал. Ни один не работал.
Первый подход - попытка изменить имена переменных в кадре данных
Код:
# Creating a data frame
df = data.frame(x = 1:5, y = 6:10)
# Changing names
names(df) = c("$X$", "$Y$\\textsuperscript{1}")
# Exporting
stargazer(df, summary = F,
notes = "\\textsuperscript{1} This is a note that was supposed to refer to $Y$.")
Вывод (ясно, что Stargazer не распознает код LaTeX):
% Table created by stargazer v.5.2 by Marek Hlavac, Harvard University. E-mail: hlavac at fas.harvard.edu
% Date and time: Sat, Oct 29, 2016 - 20:46:22
\begin{table}[!htbp] \centering
\caption{}
\label{}
\begin{tabular}{@{\extracolsep{5pt}} ccc}
\\[-1.8ex]\hline
\hline \\[-1.8ex]
& \$X\$ & \$Y\$\textbackslash textsuperscript\{1\} \\
\hline \\[-1.8ex]
1 & $1$ & $6$ \\
2 & $2$ & $7$ \\
3 & $3$ & $8$ \\
4 & $4$ & $9$ \\
5 & $5$ & $10$ \\
\hline \\[-1.8ex]
\end{tabular}
\end{table}
Второй подход - попытка использовать аргумент column.labels
Код:
# Creating a data frame
df = data.frame(x = 1:5, y = 6:10)
# Exporting
stargazer(df, summary = F,
column.labels = c("$X$", "$Y$\\textsuperscript{1}"),
notes = "\\textsuperscript{1} This is a note that was supposed to refer to $Y$.")
Вывод (stargazer просто игнорирует аргумент):
% Table created by stargazer v.5.2 by Marek Hlavac, Harvard University. E-mail: hlavac at fas.harvard.edu
% Date and time: Sat, Oct 29, 2016 - 20:57:41
\begin{table}[!htbp] \centering
\caption{}
\label{}
\begin{tabular}{@{\extracolsep{5pt}} ccc}
\\[-1.8ex]\hline
\hline \\[-1.8ex]
& x & y \\
\hline \\[-1.8ex]
1 & $1$ & $6$ \\
2 & $2$ & $7$ \\
3 & $3$ & $8$ \\
4 & $4$ & $9$ \\
5 & $5$ & $10$ \\
\hline \\[-1.8ex]
\multicolumn{3}{l}{\textsuperscript{1} This is a note that was supposed to refer to $Y$.} \\
\end{tabular}
\end{table}
1 ответ
Немного хакерский, но главная идея здесь gsub
из соответствующей строки в stargazer
вывод с желаемым латексным кодом:
# Creating a data frame
df = data.frame(x = 1:5, y = 6:10)
out <- capture.output(
stargazer(df, summary = F,
notes = "\\textsuperscript{1} This is a note that was supposed to refer to $Y$.")
)
# Changing names
vars = c("x" = "$X$", "y" = "$Y$\\\\textsuperscript{1}")
cat(sep = "\n",
gsub(paste(names(vars), collapse = " & "), paste(vars, collapse = " & "), out)
)
# \begin{table}[!htbp] \centering
# \caption{}
# \label{}
# \begin{tabular}{@{\extracolsep{5pt}} ccc}
# \\[-1.8ex]\hline
# \hline \\[-1.8ex]
# & $X$ & $Y$\textsuperscript{1} \\
# \hline \\[-1.8ex]
# 1 & $1$ & $6$ \\
# 2 & $2$ & $7$ \\
# 3 & $3$ & $8$ \\
# 4 & $4$ & $9$ \\
# 5 & $5$ & $10$ \\
# \hline \\[-1.8ex]
# \multicolumn{3}{l}{\textsuperscript{1} This is a note that was supposed to refer to $Y$.} \\
# \end{tabular}
# \end{table}
При использовании аргумента align = T
, пытаться
vars = sprintf("\\\\multicolumn\\{1\\}\\{c\\}\\{%s\\}",
c("$X$", "$Y$\\\\textsuperscript{1}"))
names(vars) <- sprintf("\\\\multicolumn\\{1\\}\\{c\\}\\{%s\\}", names(df))
cat(sep = "\n",
gsub(paste(names(vars), collapse = " & "), paste(vars, collapse = " & "), out)
)
Вы можете сделать что-то подобное, но запустите код перед настройкой имени, вы не хотите вводить несоответствующее имя,
stargazer(GLM.1$finalModel, GLM.2$finalModel, GLM.3$finalModel,
out = "my.GLMs.htm",
title = "Logistic Models", type = "html",
single.row = TRUE, report = "vc*", df = FALSE, header = FALSE, digits=2,
column.labels = c("GLM 1", "GLM 2", "GLM 3"), apply.coef=exp,
p.auto=F, dep.var.caption = "Odds Ratio", intercept.bottom = FALSE,
covariate.labels=c( "Gender", "Marital Status","Age", "Employed", "Education",
"Political Affiliation", "Rural", "Ethnicity", "Region", "Gross Income", "Networth","Networth-HomeEquity", "Liquid Assets"))