11
votes

Is there a way to repeat the top row / set headers when generating an xtable with a longtable option ?

For eg., if I have

tableSb <- xtable(df, caption="A Very Long Table", label="ALongTable")
print(tableSb, include.rownames=TRUE, tabular.environment="longtable", floating=FALSE)

This works fine, but when the tables roll over into a new page the headers are not repeated. Any suggestions ?

2
This question doesn't seem to be getting any more answers, has any one of those below solved your issue? If so, you can select it as accepted, which will improve your reputation on SO.Waldir Leoncio
Sure, done. Thanks for reminding.xbsd

2 Answers

26
votes

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.

2
votes

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.