2013-02-20 3 views
2

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

+1

Ни один пример не предлагается. Вероятно, вы должны посмотреть на табличный пакет. –

ответ

5

Чтобы сделать это в 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\} \\ 

Как это?

+0

Блестящий! Большое спасибо! – hejseb

3

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

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

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

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