我想通过texreg创建一个具有分组列的表。我只能看到分组行的选项(groups)。

这是一个例子:

set.seed(01349)
DF <- data.frame(y = rnorm(100), x1A = rnorm(100), x2A = rnorm(100),
                 x1B = rnorm(100), x2B = rnorm(100))
regs <- lapply(paste0("x", 1:2, c("A", "A", "B", "B")), function(x)
          lm(paste0("y ~ ", x), data = DF))

这是我用普通texreg可以得到的:
texreg(regs, custom.coef.names = c("Intercept", rep("x", 4)),
       custom.model.names = c("1", "2", "1", "2"))

使用LaTeX输出:
\begin{table}
\begin{center}
\begin{tabular}{l c c c c }
\hline
           & 1 & 2 & 1 & 2 \\
\hline
Intercept  & $-0.13$  & $-0.13$  & $-0.11$  & $-0.11$  \\
           & $(0.12)$ & $(0.12)$ & $(0.12)$ & $(0.12)$ \\
x          & $0.02$   & $0.07$   & $0.13$   & $-0.11$  \\
           & $(0.13)$ & $(0.12)$ & $(0.12)$ & $(0.13)$ \\
\hline
R$^2$      & 0.00     & 0.00     & 0.01     & 0.01     \\
Adj. R$^2$ & -0.01    & -0.01    & 0.00     & -0.00    \\
Num. obs.  & 100      & 100      & 100      & 100      \\
RMSE       & 1.18     & 1.17     & 1.17     & 1.17     \\
\hline
\multicolumn{5}{l}{\scriptsize{$^{***}p<0.001$, $^{**}p<0.01$, $^*p<0.05$}}
\end{tabular}
\caption{Statistical models}
\label{table:coefficients}
\end{center}
\end{table}

我希望多加一行(以%注释突出显示):
\begin{table}
\begin{center}
\begin{tabular}{l c c c c }
\hline
%*************A HEADER LINE HERE*********************
 & \multicolumn{2}{c}{A} & \multicolumn{2}{c}{B} \\ %
%****************************************************
           & 1 & 2 & 1 & 2 \\
\hline
Intercept  & $-0.13$  & $-0.13$  & $-0.11$  & $-0.11$  \\
           & $(0.12)$ & $(0.12)$ & $(0.12)$ & $(0.12)$ \\
x          & $0.02$   & $0.07$   & $0.13$   & $-0.11$  \\
           & $(0.13)$ & $(0.12)$ & $(0.12)$ & $(0.13)$ \\
\hline
R$^2$      & 0.00     & 0.00     & 0.01     & 0.01     \\
Adj. R$^2$ & -0.01    & -0.01    & 0.00     & -0.00    \\
Num. obs.  & 100      & 100      & 100      & 100      \\
RMSE       & 1.18     & 1.17     & 1.17     & 1.17     \\
\hline
\multicolumn{5}{l}{\scriptsize{$^{***}p<0.001$, $^{**}p<0.01$, $^*p<0.05$}}
\end{tabular}
\caption{Statistical models}
\label{table:coefficients}
\end{center}
\end{table}

我是否缺少某些东西,或者没有内置的方法来做到这一点?

我的解决方法是:
x <- capture.output(texreg(
  regs, custom.coef.names = c("Intercept", rep("x", 4)),
  custom.model.names = c("1", "2", "1", "2")))

x[6] <- paste0("& \\multicolumn{2}{c}{A} & \\multicolumn{2}{c}{B} \\\\ \n", x[6])

cat(x, sep = "\n")

但这显然有点像胶带。

最佳答案

您可以通过在控制台中输入function或从github包的texreg website中读取texreg的代码。

texreg
function (l, file = NULL, single.row = FALSE, stars = c(0.001,
    0.01, 0.05), custom.model.names = NULL,...

这是4个模型的表的stargazer的输出:
\begin{table}
\begin{center}
\begin{tabular}{l c c c c }
\hline
 & Model 1 & Model 2 & Model 3 & Model 4 \\

我查看了表开头的代码行469:
 string <- paste0(string, "\\begin{tabular}{", coldef,
            "}", linesep)

然后我添加了一些自己的更改:
string <- paste0(string, "\\begin{tabular}{", coldef,
                 "}", linesep)
## Additions
string <- paste0(string, "\\\\[-1.8ex]\\hline", linesep)
string <- paste0(string, "& \\multicolumn{", length(l),
                 "}{c}{\\textit{Dependent variable:}} \\\\", linesep)
string <- paste0(string, "\\cline{2-",length(modnames), "}", linesep)
string <- paste0(string, "\\\\[-1.8ex] & \\multicolumn{", length(l),
                 "}{c}{", dep.var, "} \\\\", linesep)

然后,使用其他名称保存该函数,例如:
texreg2 <- function (l, file = NULL, single.row = FALSE, ...)

现在,该函数需要包中的内部函数,因此您需要将自定义函数附加到环境中包的 namespace 中。十分简单:
environment(texreg2) <- asNamespace('texreg')

现在您可以调用新功能了。我的添加内容包括三行和因变量的名称,类似于regex
texreg2(out, dep.var = "Normalize Citation Score")

\begin{table}
\begin{center}
\begin{tabular}{l c c c c }
\\[-1.8ex]\hline
& \multicolumn{4}{c}{\textit{Dependent variable:}} \\
\cline{2-5}
\\[-1.8ex] & \multicolumn{4}{c}{Normalize Citation Score} \\
\hline
 & Model 1 & Model 2 & Model 3 & Model 4 \\

最后,如果您不喜欢此方法,则可以使用ojit_code操作输出,请 check out 此question

关于r - 将多列添加到我的texreg输出中,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/37402445/

10-12 17:19