xtable и выравнивание заголовков

Возможно ли иметь выравнивание заголовка в xtable, отличное от выравнивания, используемого в остальной части таблицы? В моем случае я хочу, чтобы мой заголовок был выровнен по центру, но сама таблица должна быть выровнена по правому краю.


person hejseb    schedule 20.02.2013    source источник
comment
Пример не предложен. Наверное, стоит посмотреть на табличный пакет.   -  person IRTFM    schedule 21.02.2013


Ответы (2)


Чтобы сделать это в LaTeX, вы вставляете свои заголовки в \multicolumn вещь, чтобы указать желаемое выравнивание:

\begin{tabular}{rrr}
  \hline
 & \multicolumn{1}{c}{x} &\multicolumn{1}{c}{y} \\ 
  \hline
1 &   1 & 0.17 \\ 
  2 &   2 & 0.63 \\ 
  3 &   3 & 0.95 \\ 
  4 &   4 & 0.57 \\ 
  5 &   5 & 0.65 \\ 
   \hline
\end{tabular}

Функция print.xtable использует имена объекта xtable в качестве заголовков. Итак, если вы переименуете свой объект xtable:

> d=data.frame(x=1:5,y=runif(5))  # sample data frame
> dx=xtable(d) # make an xtable
> names(dx)=c("\\multicolumn{1}{c}{x}","\\multicolumn{1}{c}{y}")

то это большая часть проделанной работы, вам просто нужно распечатать ее, переопределив функцию очистки print.xtable:

> print.xtable(dx,sanitize.colnames.function=function(x){x})
% latex table generated in R 2.15.1 by xtable 1.7-0 package
% Thu Feb 21 15:28:11 2013
\begin{table}[ht]
\begin{center}
\begin{tabular}{rrr}
  \hline
 & \multicolumn{1}{c}{x} & \multicolumn{1}{c}{y} \\ 
  \hline
1 &   1 & 0.78 \\ 
  2 &   2 & 0.34 \\ 
  3 &   3 & 0.88 \\ 
  4 &   4 & 0.45 \\ 
  5 &   5 & 0.54 \\ 
   \hline
\end{tabular}
\end{center}
\end{table}

в противном случае это

& $\backslash$multicolumn\{1\}\{c\}\{x\} & $\backslash$multicolumn\{1\}\{c\}\{y\} \\ 

Как это?

person Spacedman    schedule 21.02.2013
comment
Отличный ответ. function(x){x} можно заменить на identity, что экономит несколько нажатий клавиш. - person Benjamin Christoffersen; 23.09.2020

Просто чтобы продолжить ответ Spacedman (не могу добавить комментарий, так как у меня нет репутации;)

Вместо того, чтобы делать sanitize.colnames.function=function(x){x}, вы можете сделать:

sanitize.colnames.function=function(x){paste0("\\multicolumn{1}{c}{",x,"}")}

Таким образом, вы можете пропустить шаг переименования. Если вы делаете/хотите сделать другие "украшения" заголовка, они должны быть сделаны до paste0 или между запятыми (если короткие)

person BBB    schedule 31.05.2016