2012-10-09 9 views
8

Ich möchte die Abmessungen in meinem xtable Ausgang gekennzeichnet haben. Allerdings ist die Tabelle Methode der xtable nicht ausgegeben Dimension auch Etiketten, wenn ich sie manuell table angeben:Wie bekomme ich dimnames in der Ausgabe von 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} 

Inspektion des Codes für xtable.table keine Geheimnisse ergeben. Können Sie die Dimensionen nicht manuell mit MultiRow erstellen?

Antwort

4

Eine Lösung mit der tables Paket:

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

Dies erstellt keine mehrzeiligen oder mehrspaltigen Header basierend auf den Namen der Dimensionen, aber es wird zumindest angezeigt.

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

die

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

Sie gibt können auch die horizontalen Linien in der "richtigen" Stelle wieder her:

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

geben

% 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

Großartig. Es ist schade, dass es R so schwierig macht, einen einfachen Tisch zu drucken. – skan

Verwandte Themen