tags:

views:

130

answers:

1

Hello,

I've got some data (the output of a ddply function) that I want to present in an xtable for use somewhere else.

calqc_table<-structure(list(RUNID = c(1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 
1L, 1L), ANALYTEINDEX = c(1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 
1L, 1L), ID = structure(1:11, .Label = c("Cal A", "Cal B", "Cal C", 
"Cal D", "Cal E", "Cal F", "Cal G", "Cal H", "Cal High", "Cal Low", 
"Cal Mid"), class = "factor"), mean_conc = c(200.619459644855, 
158.264703128903, 102.469121407733, 50.3551544728544, 9.88296440865076, 
4.41727762501703, 2.53494715706024, 1.00602831741361, 199.065054555735, 
2.48063347296935, 50.1499780776199), sd_conc = c(2.3275711264554, 
NA, NA, NA, NA, NA, NA, 0.101636943231162, 0, 0, 0), nrow = c(3, 
1, 1, 1, 1, 1, 1, 3, 2, 2, 2)), .Names = c("RUNID", "ANALYTEINDEX", 
"ID", "mean_conc", "sd_conc", "nrow"), row.names = c(NA, -11L
), class = "data.frame")
calqc_xtable<-xtable(calqc_table)
print(calqc_xtable,type="html")

which gives me the table in html format. However, I want to Merge together the content of the RUNID and ANALYTEINDEX columns vertically where the values are the same. Anyone know how to do that via xtable (or some other way ?)

+1  A: 

I would "clean up" the original data frame replacing the values that are equal to the previous value by NA. xtable will render these missing values as empty spaces. This will look good if you don't have horizontal border lines.

cleanf <- function(x){ 
   oldx <- c(FALSE, x[-1]==x[-length(x)])  # is the value equal to the previous?
   res <- x
   res[oldx] <- NA        
   res}

Now we can apply this function to the columns that you want cleaned up:

clean.cols <- c( "RUNID", "ANALYTEINDEX")
calqc_table[clean.cols] <- lapply(calqc_table[clean.cols], cleanf)
Aniko
Yes, that's almost perfect (Extra kudos for using a vectorised function, I would have broken out a for next loop for sure...)
PaulHurleyuk