Repeat headers when using xtable with longtable option

In order to accomplish this, you'll need to use the add.to.row option of the print function (run ?print.xtable for more information).

Try this (adapted from a post on R-Forge)

addtorow          <- list()
addtorow$pos      <- list()
addtorow$pos[[1]] <- c(0)
addtorow$command  <- c(paste(
  "\\hline \n",
  "\\endhead \n",
  "\\hline \n",
  "{\\footnotesize Continued on next page} \n",
  "\\endfoot \n",
  "\\endlastfoot \n",
  sep=""))
x.big <- xtable(
  x,
  label = "tabbig",
  caption = "Example of longtable spanning several pages")
print(
  x.big,
  tabular.environment = "longtable",
  floating = FALSE,
  include.rownames = FALSE,  # because addtorow will substitute the default row names 
  add.to.row = addtorow,     # this is where you actually make the substitution
  hline.after=c(-1))         # because addtorow will substitute the default hline for the first row

It's a bit clumsy of a solution, but at least it'll provide you with plenty of customization.


Looking at the code for print.xtable, the only considerations it makes when tabular.environment="longtable" are

  • Emitting a warning if you also set floating=TRUE
  • Putting the caption in the right place for a longtable (top or bottom)

It does not emit the code specific for repeating the headers on subsequent pages. Check out latex in the Hmisc package. I know it has support for longtables as well, but I don't recall if it repeats headers correctly.