2016-05-24 16 views
8

Tôi muốn tạo một bảng có các cột được nhóm theo nhóm qua texreg. Tôi chỉ có thể thấy các tùy chọn để được nhóm hàng (groups).Thêm nhiều cột vào đầu ra texreg của tôi

Dưới đây là một ví dụ:

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

Dưới đây là càng gần như tôi có thể nhận được với đồng bằng texreg:

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

Với sản lượng 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} 

tôi muốn thêm dòng (được đánh dấu bằng % nhận xét):

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

Tôi có thiếu thứ gì đó hoặc không có cách tích hợp để thực hiện việc này?

workaround của tôi là:

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

Nhưng đó rõ ràng là một chút ống-băng-y.

Trả lời

0

Bạn có thể đọc mã số function bằng cách nhập mã vào bảng điều khiển hoặc từ githubwebside của gói texreg.

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

Đây là sản phẩm của texreg cho một bảng của 4 mô hình:

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

Tôi nhìn vào các dòng mã 469, các beggining của bảng:

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

Sau đó, tôi đã thêm một số thay đổi của riêng tôi:

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) 

Sau đó, lưu chức năng với một tên khác nhau ví dụ:

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

Bây giờ, chức năng đòi hỏi chức năng nội bộ từ gói, vì vậy bạn cần phải đính kèm chức năng tùy chỉnh của bạn để không gian tên của gói trong môi trường của bạn. Easy peasy:

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

Bây giờ bạn có thể gọi hàm mới của mình. Các bổ sung của tôi bao gồm ba dòng và tên cho biến phụ thuộc, tương tự như 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 \\ 

Cuối cùng, nếu bạn không thích phương pháp này, bạn có thể thao tác các đầu ra với regex, kiểm question này.

+1

thực sự đây là cách tôi đã đi về việc thêm 'multicolumn' trong một thời gian. Tôi thấy nó hơi quá đơn điệu để làm phiền việc viết nó vào một hàm, và chỉ xử lý nó theo từng trường hợp. Cảm ơn vì sự trả lời. – MichaelChirico

Các vấn đề liên quan