2011-09-14 8 views
9

Tiene una pregunta sobre el uso de xtable con Sweave cuando hay varias columnas. Una tabla en la que estoy trabajando tiene unas 25 columnas y 5 filas. No se conoce el número exacto de columnas, ya que es dinámico.Salida de xtable dividida en las tablas secundarias

Cuando corro por ejemplo,

tabla1 < - Mesa (df $ SomeField)

consigo una tabla que supera esencialmente la longitud de la página.

 ColA ColB ColC 
--------------------------- 
RowA 1  2  3 ...... 
RowB 3  4  6 ...... 

Si un hacer un xtable en esto, y ejecutarlo a través de Sweave,

xtable(table1, caption="some table") 

se desborda.

Lo que estoy buscando es algo así como,

 ColA ColB ColC 
--------------------------- 
RowA 1  2  3 
RowB 3  4  6 

     ColD ColE ColF 
--------------------------- 
RowA 11  9  34 
RowB 36  8  65 

con las marcas \ HLINE etc. Básicamente, divida el xtable en partes digamos 5 columnas por "subtabla".

También estoy ejecutando esto en un trabajo por lotes, por lo que no podré hacer cambios en los archivos individuales, cualquiera que sea la solución que tiene para poder generar ejecutando Sweave en el archivo Rnw.

Gracias de antemano,

Saludos,

  • Raj.
+0

Es posible que también desee ver Hmisc :: latex porque es compatible con el formato de tabla larga. No soy un usuario de Sweave pero obtengo una buena salida de LaTeX con ese programa. –

Respuesta

3

He aquí un ejemplo de esto desde ?latex.table.by en el paquete taRifx. Puede elaborar algo similar usando longtable en LaTeX y usar el código latex.table.by como prototipo.

my.test.df <- data.frame(grp=rep(c("A","B"),10),data=runif(20)) 
library(xtable) 
latex.table.by(my.test.df) 
# print(latex.table.by(test.df), include.rownames = FALSE, include.colnames = TRUE, sanitize.text.function = force) 
# then add \usepackage{multirow} to the preamble of your LaTeX document 
# for longtable support, add ,tabular.environment='longtable' to the print command (plus add in ,floating=FALSE), then \usepackage{longtable} to the LaTeX preamble 

En cualquier caso, el paquete longtable en LaTeX es la clave.

Editar: Parece que tiene demasiadas columnas no demasiadas filas. En ese caso, primero intente ajardinar solo esa página.

En el encabezado:

\usepackage{lscape} 

alrededor de tu mesa:

\begin{landscape} 
... 
\end{landscape} 

o simplemente utilizar sidewaystable.

Si su tabla es demasiado amplia para caber en una página, pruebe el paquete supertabular, que por la descripción parece que podría manejar la ruptura de varias páginas según el ancho (pero nunca lo he usado, así que no puede Por supuesto).

+0

Hola gsk3, gracias por los comentarios.Desafortunadamente, el número de columnas puede ser bastante alto (ya que es una variable dinámica que depende de algunos otros factores). Por lo tanto, para obtener resultados garantizados, es posible que tampoco encaje en un paisaje. El número de filas es fijo - 5-6. – xbsd

+0

@xbsd: se agregó otra sugerencia. Si 'supertabular' no funciona, solicite a un mod que lo migre a http://tex.stackexchange.com/ ya que allí hay expertos reales de LaTeX. –

+1

@xbsd: ¿por qué no transpone la matriz? Entonces tiene un número fijo y pequeño de cols y una gran cantidad de filas. Eso es muy fácil con el entorno longtable (use tabular.environment = "longtable"). Esta solución es a) muy fácil yb) ocupará menos espacio en su documento. – Thierry

Cuestiones relacionadas