2010-03-04 6 views
2

J'ai des données (la sortie d'une fonction de ddply) que je veux présenter dans un XTABLE pour un autre endroit.Pouvez-vous fusionner des cellules dans un XTABLE en R

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") 

qui me donne la table au format html. Cependant, je veux fusionner le contenu des colonnes RunId et ANALYTEINDEX verticalement où les valeurs sont les mêmes. Quelqu'un sait comment le faire via XTABLE (ou d'une autre manière?)

Répondre

3

Je « nettoyer » la trame de données d'origine en remplaçant les valeurs qui sont égales à la valeur précédente par NA. xtable va rendre ces valeurs manquantes comme des espaces vides. Cela semblera bien si vous n'avez pas de lignes horizontales.

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

Maintenant, nous pouvons appliquer cette fonction aux colonnes que vous voulez assainis:

clean.cols <- c("RUNID", "ANALYTEINDEX") 
calqc_table[clean.cols] <- lapply(calqc_table[clean.cols], cleanf) 
+0

Oui, c'est presque parfait (kudos supplémentaires pour l'utilisation d'une fonction vectorisé, je l'aurais cassé un pour la prochaine boucle à coup sûr ...) – PaulHurleyuk

Questions connexes