2011-09-14 14 views
9

Masz pytanie dotyczące używania XTable z Sweave, gdy istnieje wiele kolumn. Tabela, nad którą pracuję, ma około 25 kolumn i 5 wierszy. Dokładna liczba kolumn nie jest znana, ponieważ jest dynamiczna.Podziel xtable ouput na podtablice

Kiedy biegnę powiedzmy

tabela1 < - tabela (df $ someField)

mam tabelę, która zasadniczo przekracza długość strony.

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

Jeśli zrobić xtable na ten temat, i uruchomić go przez Sweave,

xtable(table1, caption="some table") 

przelewa.

Co szukam jest coś,

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

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

z \ hline itp narzutów. Zasadniczo podziel XTable na części, powiedzmy 5 kolumn na "pod-tabeli".

Używam tego również w zadaniu wsadowym, więc nie będę w stanie wprowadzać zmian w poszczególnych plikach, niezależnie od tego, jakie rozwiązanie ma być możliwe do wygenerowania przez uruchomienie Sweave na pliku Rnw.

Dzięki z góry,

Pozdrawiam,

  • Raj.
+0

Możesz także chcieć spojrzeć na Hmisc :: latex, ponieważ obsługuje on format longtable. Nie jestem użytkownikiem Sweave, ale mam dobre wyjście LaTeXa z tym programem. –

Odpowiedz

3

Oto przykład tego z ?latex.table.by w pakiecie . Możesz zaparzyć coś podobnego za pomocą longtable w LaTeX i użyć kodu latex.table.by jako prototypu.

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 

Bez względu na to, kluczem jest pakiet longtable w LaTeX.

Edytuj: Wydaje się, że masz za dużo kolumn, a nie za dużo wierszy. W takim przypadku najpierw spróbuj zaprojektować teren tylko tej strony.

W nagłówku:

\usepackage{lscape} 

wokół stołu:

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

Albo po prostu użyć sidewaystable.

Jeśli Twój stół jest zbyt szeroki, aby zmieścić się na jednej stronie, wypróbuj pakiet supertabular, który z opisu brzmi, jakby mógł poradzić sobie z przełamaniem wielu stron na podstawie szerokości (ale nigdy go nie używałem, więc nie może być pewnie).

+0

Witam gsk3, dziękuję za informację zwrotną.Niestety liczba kolumn może być dość wysoka (ponieważ jest to zmienna dynamiczna zależna od kilku innych czynników). Tak więc, aby uzyskać gwarantowane wyniki, może również nie pasować do krajobrazu. Liczba wierszy jest stała - 5-6. – xbsd

+0

@xbsd: Dodano kolejną sugestię. Jeśli 'supertabular' nie działa, poproś mod o przeniesienie tego do http://tex.stackexchange.com/, ponieważ istnieją tam prawdziwi eksperci LaTeX. –

+1

@ xbsd: dlaczego po prostu nie przetransponujesz macierzy? Wtedy masz stałą i małą liczbę kolorów i dużą liczbę wierszy. Jest to bardzo łatwe w przypadku środowiska longtable (użyj tabular.environment = "longtable"). To rozwiązanie jest a) bardzo łatwe i b) zajmie mniej miejsca w twoim dokumencie. – Thierry