9

我想在我的xtable输出中标记尺寸。xtable但是,即使我手动指定维度标签,table 方法也不会输出维度标签table

set.seed(10)
d <- data.frame(x=sample(1:4),y=sample(1:4))
tb <- with(d, table(d,dnn=c("Xs","Ys")))
> tb
   Ys
Xs  1 2 3 4
  1 0 0 0 1
  2 0 1 0 0
  3 1 0 0 0
  4 0 0 1 0
> xtable(tb)
% latex table generated in R 2.15.1 by xtable 1.7-0 package
% Tue Oct  9 09:06:10 2012
\begin{table}[ht]
\begin{center}
\begin{tabular}{rrrrr}
  \hline
 & 1 & 2 & 3 & 4 \\ 
  \hline
1 &   0 &   0 &   0 &   1 \\ 
  2 &   0 &   1 &   0 &   0 \\ 
  3 &   1 &   0 &   0 &   0 \\ 
  4 &   0 &   0 &   1 &   0 \\ 
   \hline
\end{tabular}
\end{center}
\end{table}

检查代码xtable.table不会产生任何秘密。除了使用 multirow 手动构建它们之外,还有什么方法可以标记尺寸吗?

4

2 回答 2

4

包装的一种解决方案tables

library(tables) 

tblr <- tabular((Xs = as.factor(x)) ~ (Ys = as.factor(y)), data = d)
latex(tblr)

\begin{tabular}{lcccc}
\hline
 & \multicolumn{4}{c}{Ys} \\ 
Xs  & 1 & 2 & 3 & \multicolumn{1}{c}{4} \\ 
\hline
1  & $0$ & $0$ & $0$ & $1$ \\
2  & $0$ & $1$ & $0$ & $0$ \\
3  & $1$ & $0$ & $0$ & $0$ \\
4  & $0$ & $0$ & $1$ & $0$ \\
\hline 
\end{tabular}
于 2013-01-23T22:12:57.013 回答
4

这不会根据维度的名称创建多行或多列标题,但至少可以显示它们。

print(xtable(format(ftable(tb))), 
      include.rownames=FALSE, include.colnames=FALSE,
      sanitize.text.function = function(x) {gsub('"',"",x)})

这使

% latex table generated in R 2.15.1 by xtable 1.7-0 package
% Tue Oct 09 11:28:33 2012
\begin{table}[ht]
\begin{center}
\begin{tabular}{llllll}
  \hline
  \hline
     & Ys & 1 & 2 & 3 & 4 \\ 
  Xs &      &     &     &     &     \\ 
  1  &      &   0 &   0 &   0 &   1 \\ 
  2  &      &   0 &   1 &   0 &   0 \\ 
  3  &      &   1 &   0 &   0 &   0 \\ 
  4  &      &   0 &   0 &   1 &   0 \\ 
   \hline
\end{tabular}
\end{center}
\end{table}

您也可以在“正确”位置恢复水平线:

print(xtable(format(ftable(tb))), 
      include.rownames=FALSE, include.colnames=FALSE,
      sanitize.text.function = function(x) {gsub('"',"",x)},
      hline.after = c(-1, 2, nrow(tb)+2))

给予

% latex table generated in R 2.15.1 by xtable 1.7-0 package
% Tue Oct 09 11:29:21 2012
\begin{table}[ht]
\begin{center}
\begin{tabular}{llllll}
  \hline
      & Ys & 1 & 2 & 3 & 4 \\ 
  Xs &      &     &     &     &     \\ 
   \hline
1  &      &   0 &   0 &   0 &   1 \\ 
  2  &      &   0 &   1 &   0 &   0 \\ 
  3  &      &   1 &   0 &   0 &   0 \\ 
  4  &      &   0 &   0 &   1 &   0 \\ 
   \hline
\end{tabular}
\end{center}
\end{table}
于 2012-10-09T18:32:37.627 回答