2011-06-07 29 views
7

Tengo tablas de datos (d1 y d2) que me gustaría imprimir una al lado de la otra o una sobre la otra en látex con sus propios títulos individuales. ¿Es posible hacer eso directamente con xtable()? Las dos tablas deben ser distintas, es decir, podríamos llamarlas Tabla x (a) y Tabla x (b), pero deben estar adyacentes o apiladas.R: Imprime dos tablas con xtable()

+0

Como una mesa? Entonces 'xtable (rbind (d1, d2))' o 'xtable (cbind (d1, d2))' debería estar bien ¿no? –

+0

Si desea mantener las tablas separadas como Xa y Xb, entonces esto se convierte en una cuestión de etiquetado de látex. Uno de los moderadores aquí debería poder migrar su pregunta. –

+0

@SachaEpskamp 'rbind' solo funciona si ambas tablas tienen el mismo' ncol' (o para 'cbind' /' nrow'). –

Respuesta

13

recomendaría guardar los resultados como dos mesas separadas en diferentes archivos (ver la opción de file=-print.xtable()), y luego input ellos en su documento LaTeX con cualquier comando que encuentre apropiado para su diseño (tabular, subfloat, minipage, etc.). Esto es lo que hago en general, aunque generalmente confío en las instalaciones de LaTeX en el paquete Hmisc. Si solo desea imprimirlos como un PDF independiente, use la clase standalone para su documento.

lo tanto, aquí está un ejemplo:

data(tli) 
fm1 <- aov(tlimth ~ sex + ethnicty + grade + disadvg, data=tli) 
print(xtable(fm1), file="ta.tex", floating=FALSE) 
print(xtable(head(tli, n=5)), file="tb.tex", floating=FALSE) 

entonces, un envoltorio tex rápida (compilar con pdflatex):

\documentclass{article} 
\usepackage{subfig} 
\usepackage{graphicx} 

\begin{document} 

\begin{table}[ht] 
\centering 
\subfloat[Table x(a)]{\label{tab:tab1a}\scalebox{.5}{\input{./ta}}}\quad 
\subfloat[Table x(b)]{\label{tab:tab1b}\scalebox{.5}{\input{./tb}}} 
\caption{Caption about here} 
\label{tab:tab1} 
\end{table} 

\end{document} 

Aquí está el resultado:

enter image description here

Eliminar el comando \scalebox para de diseño de fallas (apiladas), a menos que sean lo suficientemente angostas como para ajustarse a su tamaño predeterminado, como lo señala @David.

enter image description here

+0

¡Perfecto! Gracias, chl. – user702432

+0

@chi eliminar '\ scalebox' no apila tablas si son lo suficientemente angostas como para caber en su tamaño predeterminado. –

+0

@David Ah, creo que tienes razón. ¡Actualicé mi respuesta en consecuencia! – chl

9

Ver Alan Munn's answer to a similar question on tex.stackexchange.com.

\documentclass{article} 
\usepackage[utf8]{inputenc} 
\usepackage{booktabs} 
\usepackage{caption} 
\title{Side-by-side xtables} 
\author{} 
\date{} 
\begin{document} 
\maketitle 
First some R code to create some data. 
<<>>= 
myData <- matrix(c(19,89,23,23,74,44,16,39,67),ncol=3,byrow=TRUE) 
colnames(myData) <- c("A","B","C") 
rownames(myData) <- c("1","2","3") 
myData2 <- myData * 2 
@ 

Now we place the data in two side-by-side tables: 

\begin{table}[htb] 
\begin{minipage}{.45\textwidth} 
\centering 
<<echo=FALSE,results=tex>>= 
library("xtable") 
print(xtable(myData), 
    floating=FALSE, 
    hline.after=NULL, 
    add.to.row=list(pos=list(-1,0, nrow(myData)), 
    command=c('\\toprule\n','\\midrule\n','\\bottomrule\n'))) 
@ 
\captionof{table}{The first table} 
\end{minipage} 
\begin{minipage}{.45\textwidth} 
\centering 
<<echo=FALSE,results=tex>>= 
print(xtable(myData2), 
    floating=FALSE, 
    hline.after=NULL, 
    add.to.row=list(pos=list(-1,0, nrow(myData2)), 
    command=c('\\toprule\n','\\midrule\n','\\bottomrule\n'))) 
@ 
\captionof{table}{The second table} 
\end{minipage} 
\end{table} 
\end{document} 

output of code

Cuestiones relacionadas