使用xtable()打印两张表格

8

我有两个数据表(d1和d2),希望在latex中并排或上下叠放打印出来,并附上它们各自的标题。是否可以直接用xtable()实现?这两个表格应该是不同的,也就是说我们可以称它们为表x(a)表x(b),但它们应该要么相邻,要么叠放。


作为一个表格?那么 xtable(rbind(d1,d2)) 或者 xtable(cbind(d1,d2)) 应该可以吧? - Sacha Epskamp
如果您想将表格分开保存为Xa和Xb,则这更像是一个latex的标记问题。 这里的任一位主持人都应该能够迁移您的问题。 - Richard Herron
@SachaEpskamp 只有当两个表具有相同的 ncol(或对于 cbind / nrow)时,rbind 才能正常工作。 - David LeBauer
2个回答

16

我建议将结果保存为两个不同文件中的两个单独表格(请参见print.xtable()函数的file=选项),然后使用适合您布局的任何命令(如tabularsubfloatminipage等)将它们input到您的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}

这是结果:

输入图像描述

如果它们的默认大小足够小以适应默认(堆叠)布局,请删除 \scalebox 命令,如 @David 所指出的那样。

输入图像描述


@chi 如果表格默认大小足够狭窄,则删除\scalebox不会使它们堆叠。 - David LeBauer
@David 啊,我想你说得对。我已经相应地更新了我的回答! - chl

10

请参考Alan Munn在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}

代码的输出结果


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接