Разделить вывод xtable на подтаблицы

Есть вопрос по использованию xtable с Sweave при наличии нескольких столбцов. Таблица, над которой я работаю, имеет около 25 столбцов и 5 строк. Точное количество столбцов неизвестно, поскольку оно является динамическим.

Когда я бегу, скажи:

таблица1 ‹- таблица (df$someField)

Я получаю таблицу, которая существенно превышает длину страницы.

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

Если сделать для этого xtable и запустить его через Sweave,

xtable(table1, caption="some table")

он переполняется.

То, что я ищу, это что-то вроде,

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

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

с разметкой \hline и т.д. По сути, разделите xtable на части, скажем, по 5 столбцов на «подтаблицу».

Я также запускаю это в пакетном задании, поэтому я не смогу вносить изменения в отдельные файлы, каким бы ни было решение, которое должно быть создано путем запуска Sweave в файле Rnw.

Заранее спасибо,

С уважением,

  • Радж.

person xbsd    schedule 14.09.2011    source источник
comment
Вы также можете взглянуть на Hmisc::latex, потому что он поддерживает формат longtable. Я не являюсь пользователем Sweave, но с помощью этой программы я получаю хороший результат в LaTeX.   -  person IRTFM    schedule 15.09.2011


Ответы (1)


Вот пример этого из ?latex.table.by в пакете taRifx. Вы можете сварить нечто подобное, используя longtable в LaTeX, и использовать код latex.table.by в качестве прототипа.

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

Несмотря на это, пакет longtable в LaTeX является ключевым.

Изменить: похоже, у вас слишком много столбцов, а не слишком много строк. В этом случае сначала попробуйте изменить ландшафт только этой страницы.

В заголовке:

\usepackage{lscape}

Вокруг вашего стола:

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

Или просто используйте sidewaystable.

Если ваша таблица слишком широка, чтобы уместиться на одной странице, попробуйте пакет supertabular, который, судя по описанию, может обрабатывать разбиение на несколько страниц в зависимости от ширины (но я никогда не использовал его, поэтому не могу быть уверен).

person Ari B. Friedman    schedule 14.09.2011
comment
Здравствуйте gsk3, спасибо за отзыв. К сожалению, количество столбцов может быть довольно большим (поскольку это динамическая переменная, зависящая от некоторых других факторов). Таким образом, для получения гарантированных результатов он также может не вписаться в ландшафт. Количество рядов фиксированное - 5-6. - person xbsd; 15.09.2011
comment
@xbsd: добавлено еще одно предложение. Если supertabular не работает, попросите модификатора перенести это на tex.stackexchange.com, поскольку там есть настоящие эксперты по LaTeX. - person Ari B. Friedman; 15.09.2011
comment
@xbsd: почему бы вам просто не перенести матрицу? Тогда у вас есть фиксированное и небольшое количество столбцов и большое количество строк. Это очень легко сделать в среде longtable (используйте tabular.environment=longtable). Это решение а) очень простое и б) займет меньше места в вашем документе. - person Thierry; 16.09.2011