2016-05-24 11 views
8

Chcę utworzyć tabelę z pogrupowanymi kolumnami przez texreg. Widzę tylko opcje zgrupowanych wierszy (groups).Dodawanie wielokolumn do mojego wyjścia texreg

Oto przykład:

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)) 

Oto tak blisko, jak mogę z czystym texreg:

texreg(regs, custom.coef.names = c("Intercept", rep("x", 4)), 
     custom.model.names = c("1", "2", "1", "2")) 

Przy wyjściu 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} 

wolałbym dodatkowy linia (podświetlona komentarzami %):

\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} 

Czy czegoś brakuje, czy nie ma wbudowanego sposobu, aby to zrobić?

Moje obejście jest:

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") 

Ale to oczywiście nieco kanał-tape-y.

Odpowiedz

0

Możesz przeczytać kod function, wpisując go w konsoli lub z githubwebside pakietu texreg.

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

To wyjście texreg za stołem z 4 modeli:

\begin{table} 
\begin{center} 
\begin{tabular}{l c c c c } 
\hline 
& Model 1 & Model 2 & Model 3 & Model 4 \\ 

zajrzałem do linii kodu 469 The początek tabeli:

string <- paste0(string, "\\begin{tabular}{", coldef, 
      "}", linesep) 

Potem dodano kilka własnych zmian:

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-5}", linesep) 
     string <- paste0(string, "\\\\[-1.8ex] & \\multicolumn{", length(l), "}{c}{", dep.var, "} \\\\", linesep) 

Następnie zapisz funkcję z inną nazwą, na przykład:

texreg2 <- function (l, file = NULL, single.row = FALSE, ...) 

Teraz funkcja wymaga wewnętrznych funkcji z pakietu, więc trzeba podłączyć funkcji niestandardowej przestrzeni nazw pakietu w danym środowisku. Łatwy w użyciu:

environment(texreg2) <- asNamespace('texreg') 

Teraz możesz zadzwonić do nowej funkcji. Moje dodatki zawierają trzy linie i nazwę zmiennej zależnej, podobne do stargazer.

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 \\ 

Wreszcie, jeśli nie lubią tej metody, można manipulować wyjście z regex, kasy tej question.

+1

Rzeczywiście tak właśnie zamierzałem dodawać 'multicolumn's od jakiegoś czasu. Uważam, że jest to trochę zbyt specyficzne, aby nie zaprzątać sobie głowy pisaniem do funkcji i po prostu traktować to indywidualnie. Dzięki za odpowiedzi. – MichaelChirico

Powiązane problemy