4
votes

I'm not sure if this is an R question or a Sweave question. I"m looking at students' marks from 2 time points in a simple table (Grade 3 and Grade 6). I've created the table and it prints, however I want to add labels so people know which mark is from which Grade.

My Sweave code is:

<<MakeData,results='asis'>>=
library(xtable)
Grade3 <- c("A","B","B","A","B","C","C","D","A","B","C","C","C","D","B","B","D","C","C","D")
Grade6 <- c("A","A","A","B","B","B","B","B","C","C","A","C","C","C","D","D","D","D","D","D")
Cohort <- table(Grade3,Grade6)
print(xtable(Cohort))
@

I get a nice table with counts, however both rows and columns have the same notation. How do I add a label to make it clearer?

1

1 Answers

11
votes

To change the labels for Cohort, change the column and rownames:

rownames(Cohort) <- 1:4
colnames(Cohort) <- 5:8

You also add table titles to the xtable call:

print(xtable(Cohort, caption = 'My Title'), caption.placement = 'top')

You can use caption.placement to tell where to put the caption.

EDIT:

Based on the comments, I didn't answer the question above. To make xtable print more like table with the labels above the levels, you use add.to.row in the print.xtable function:

addtorow <- list()
addtorow$pos <- list()
addtorow$pos[[1]] <- 0
addtorow$pos[[2]] <- 0
addtorow$command <- c('& & Grade 6 & & \\\\\n', "Grade 3 & A & B & C & D \\\\\n")
print(xtable(Cohort, caption = 'My Title'), caption.placement = 'top', 
      add.to.row = addtorow, include.colnames = FALSE)

add.to.row takes a list with two elements: pos and command. pos is a list of whose length is the same as command which is a vector. Each element of pos is the line in the table where you are placing the corresponding element of command.

Here, I want the first two lines to be where the labels go. I set the first and second elements of pos to 0 to indicate that I am putting things on the top of the table. The 0 position is that between the two horizontal rules in the table.

The \\\\\n produce the '\\' in the LaTeX code that is used at the end of each line of a table plus a newline character.

The help for xtable has a good example of add.to.row for more information.