问题
I'd like to have the dimensions labeled in my xtable
output. However, the table method of xtable
does not output dimension labels even when I specify them manually to 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}
Inspection of the code for xtable.table
doesn't yield any secrets. Short of building them manually with multirow is there any way of getting the dimensions labeled?
回答1:
One solution with the tables
package:
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}
回答2:
This doesn't create multirow or multicolumn headers based on the names of the dimensions, but it at least does get them displayed.
print(xtable(format(ftable(tb))),
include.rownames=FALSE, include.colnames=FALSE,
sanitize.text.function = function(x) {gsub('"',"",x)})
which gives
% 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}
You can restore the horizontal lines in the "right" place as well:
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))
giving
% 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}
来源:https://stackoverflow.com/questions/12800784/how-to-get-dimnames-in-xtable-table-output