Question

I would like to transpose (i.e. vectors as columns) a data.frame in R and export it to Latex without row numbers but with a column instead. I would like to have an output like this:

Tab

But

df <- data.frame(qwertz=c("a","b","c","d","e","f"), asdfg=c("a","b"))

i.e.

    qwertz asdfg
1      a     a
2      b     b
3      c     a
4      d     b
5      e     a
6      f     b

When I use xtable and booktabs

library(xtable)
print(xtable(t(df)), include.colnames=FALSE, booktabs=TRUE)

latex outpout is

Tab i.e.

print(xtable(t(df)), include.colnames=FALSE, booktabs=TRUE)
% latex table generated in R 3.0.2 by xtable 1.7-1 package
\begin{table}[ht]
    \centering
    \begin{tabular}{rllllll}
      \toprule
      \midrule
        qwertz & a & b & c & d & e & f \\ 
         asdfg & a & b & a & b & a & b \\ 
      \bottomrule
    \end{tabular}
\end{table}

Question: how can I have directly the \midrule between the two lines?

I tried with toLatex() from ENmisc and Latex() from Hmisc too and after reading these two questions:

https://tex.stackexchange.com/q/25575/36408

https://tex.stackexchange.com/q/75793/36408

Was it helpful?

Solution

You can use the add.to.row parameter

library(xtable)
df <- data.frame(qwertz=c("a","b","c","d","e","f"), asdfg=c("a","b"))
df <- t(df)
n <- nrow(df)

print(xtable(df), hline.after = NULL,
      include.colnames = FALSE,
      add.to.row = list(pos = list(0, 1, n),
      command = c('\\toprule[1.5pt]\n', '\\midrule[1pt]\n', '\\bottomrule[1.5pt]\n')))
## % latex table generated in R 3.0.2 by xtable 1.7-1 package
## % Sat Jan 25 14:32:34 2014
## \begin{table}[ht]
## \centering
## \begin{tabular}{rllllll}
##   \toprule[1.5pt]
##  qwertz & a & b & c & d & e & f \\ 
##    \midrule[1pt]
## asdfg & a & b & a & b & a & b \\ 
##    \bottomrule[1.5pt]
## \end{tabular}
## \end{table}

To use it with longtable LaTeX environment you can do something like this

print(xtable(df),
      tabular.environment = "longtable",
      floating = FALSE,
      hline.after = NULL,
      include.colnames = FALSE,
      booktabs = TRUE,
      add.to.row = list(pos = list(0, 1, n),
      command = c('\\toprule[1.5pt]\n', '\\midrule[1pt]\n', '\\bottomrule[1.5pt]\n')))
## % latex table generated in R 3.0.2 by xtable 1.7-1 package
## % Mon Jan 27 13:00:01 2014
## \begin{longtable}{rllllll}
##    \toprule[1.5pt]
## qwertz & a & b & c & d & e & f \\ 
##    \midrule[1pt]
## asdfg & a & b & a & b & a & b \\ 
##    \bottomrule[1.5pt]
## \end{longtable}
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top