2012-10-09 5 views
8

Me gustaría tener las dimensiones etiquetadas en mi salida xtable. Sin embargo, el método de la tabla de xtable no hace dimensión de salida de etiquetas incluso cuando especifico de forma manual a table:¿Cómo obtener dimnames en salida de xtable.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} 

Inspección del código de xtable.table no produce ningún secreto. Además de construirlos manualmente con multirow, ¿hay alguna forma de etiquetar las dimensiones?

Respuesta

4

Una solución con la tables paquete:

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} 
4

Esto no crea encabezados múltiples o multicolumnas basados ​​en los nombres de las dimensiones, pero al menos sí los muestra.

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

lo que da

% 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} 

Puede restaurar las líneas horizontales en el lugar "correcto", así:

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)) 

dando

% 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} 
+0

Genial. Es una pena que R haga que sea tan difícil imprimir una tabla simple. – skan

Cuestiones relacionadas