2011-06-07 46 views
7

我有數據表(d1和d2),我想用它們自己的單獨標題並排或相互排列在乳膠上。是否有可能直接與xtable()做到這一點?這兩個表應該是不同的,即我們可以稱它們爲表x(a)表x(b),但它們應該是相鄰的或堆疊的。R:使用xtable()打印兩個表格

+0

作爲一個表?那麼'xtable(rbind(d1,d2))'或'xtable(cbind(d1,d2))'應該沒問題吧? – 2011-06-07 09:58:52

+0

如果您希望將表格分隔爲Xa和Xb,那麼這會變成更多乳膠標籤問題。其中一位版主應該可以遷移您的問題。 – 2011-06-07 11:24:24

+0

@SachaEpskamp'rbind'只有在兩個表具有相同的'ncol'(或'cbind' /'nrow')時纔有效。 – 2012-07-20 20:24:26

回答

13

我會建議保存結果在不同文件中的兩個單獨的表(見file=選項print.xtable()),然後input他們與您找到適合您的佈局(tabularsubfloatminipage任何命令你的LaTeX文檔,等等。)。這就是我一般的做法,儘管我通常依靠Hmisc包中的LaTeX工具。如果您只想將它​​們打印爲獨立PDF,請使用standalone類作爲文檔。

所以,這裏有一個例子:

data(tli) 
fm1 <- aov(tlimth ~ sex + ethnicty + grade + disadvg, data=tli) 
print(xtable(fm1), file="ta.tex", floating=FALSE) 
print(xtable(head(tli, n=5)), file="tb.tex", floating=FALSE) 

然後,快速TEX包裝(編譯pdflatex):

\documentclass{article} 
\usepackage{subfig} 
\usepackage{graphicx} 

\begin{document} 

\begin{table}[ht] 
\centering 
\subfloat[Table x(a)]{\label{tab:tab1a}\scalebox{.5}{\input{./ta}}}\quad 
\subfloat[Table x(b)]{\label{tab:tab1b}\scalebox{.5}{\input{./tb}}} 
\caption{Caption about here} 
\label{tab:tab1} 
\end{table} 

\end{document} 

下面是結果:

enter image description here

刪除\scalebox指令錯誤(堆疊)佈局,除非它們足夠窄以適合其默認大小,正如@David所述。

enter image description here

+0

完美!謝謝,謝謝。 – user702432 2011-06-08 04:11:26

+0

@chi刪除'\ scalebox'不會堆放表格,如果它們足夠窄以適合其默認大小。 – 2012-07-20 20:25:55

+0

@大衛啊,我認爲你是對的。相應地更新我的回覆! – chl 2012-07-22 09:56:50

9

Alan Munn's answer to a similar question on tex.stackexchange.com

\documentclass{article} 
\usepackage[utf8]{inputenc} 
\usepackage{booktabs} 
\usepackage{caption} 
\title{Side-by-side xtables} 
\author{} 
\date{} 
\begin{document} 
\maketitle 
First some R code to create some data. 
<<>>= 
myData <- matrix(c(19,89,23,23,74,44,16,39,67),ncol=3,byrow=TRUE) 
colnames(myData) <- c("A","B","C") 
rownames(myData) <- c("1","2","3") 
myData2 <- myData * 2 
@ 

Now we place the data in two side-by-side tables: 

\begin{table}[htb] 
\begin{minipage}{.45\textwidth} 
\centering 
<<echo=FALSE,results=tex>>= 
library("xtable") 
print(xtable(myData), 
    floating=FALSE, 
    hline.after=NULL, 
    add.to.row=list(pos=list(-1,0, nrow(myData)), 
    command=c('\\toprule\n','\\midrule\n','\\bottomrule\n'))) 
@ 
\captionof{table}{The first table} 
\end{minipage} 
\begin{minipage}{.45\textwidth} 
\centering 
<<echo=FALSE,results=tex>>= 
print(xtable(myData2), 
    floating=FALSE, 
    hline.after=NULL, 
    add.to.row=list(pos=list(-1,0, nrow(myData2)), 
    command=c('\\toprule\n','\\midrule\n','\\bottomrule\n'))) 
@ 
\captionof{table}{The second table} 
\end{minipage} 
\end{table} 
\end{document} 

output of code