Question

Si le dataframe suivant s'appelle result

> result
     Name       CV      LCB       UCB
1  within 2.768443 1.869964  5.303702
2 between 4.733483 2.123816 18.551051
3   total 5.483625 3.590745 18.772389

> dput(result,"")
structure(list(Name = structure(c("within", "between", "total"
), .rk.invalid.fields = list(), .Label = character(0)), CV = c(2.768443, 
4.733483, 5.483625), LCB = c(1.869964, 2.123816, 3.590745), UCB = c(5.303702, 
18.551051, 18.772389)), .Names = c("Name", "CV", "LCB", "UCB"
), row.names = c(NA, 3L), class = "data.frame")

Quel est le meilleur moyen de présenter correctement ces données? Idéalement, j'aimerais un fichier image pouvant être collé dans un rapport, ou éventuellement un fichier HTML représentant le tableau?

Points supplémentaires pour la définition du nombre de chiffres significatifs.

Était-ce utile?

La solution

J'utiliserais xtable . Je l’utilise habituellement avec Sweave.

library(xtable)
d <- data.frame(letter=LETTERS, index=rnorm(52)) 
d.table <- xtable(d[1:5,])
print(d.table,type="html")

Si vous souhaitez l'utiliser dans un document Sweave, utilisez-le comme suit:

<<label=tab1,echo=FALSE,results=tex>>=
xtable(d, caption = "Here is my caption", label = "tab:one",caption.placement = "top")
@

Autres conseils

Pour l'aspect table, le package xtable est fourni. Cela peut produire une sortie LaTeX (que vous pouvez utiliser via Sweave pour des rapports professionnels) ainsi que du HTML.

Si vous combinez cela dans Sweave avec des graphiques de fantaisie (voir d'autres questions pour des exemples de ggplot), vous y êtes presque.

library(ggplot2)
ggplot(result, aes(x = Name, y = CV, ymin = LCB, ymax = UCB)) + geom_errorbar() + geom_point()
ggplot(result, aes(x = Name, y = CV, ymin = LCB, ymax = UCB)) + geom_pointrange()

Vous ne pouvez pas commenter la création d'un joli tableau, mais pour définir les chiffres significatifs, la chose la plus facile à faire (pour cet exemple de données, sachez-le) serait de déplacer Nom vers les noms génériques et de les contourner.

#Set the rownames equal to Name - assuming all unique
rownames(result) <- result$Name  
#Drop the Name column so that round() can coerce
#result.mat to a matrix
result.mat <- result[ , -1]       
round(result.mat, 2) #Where 2 = however many sig digits you want.            

Ce n’est pas une solution extrêmement robuste - des valeurs de nom non uniques briseraient celle-ci, à mon avis, comme le feraient d’autres colonnes non numériques. Mais pour produire une table comme celle de votre exemple, le problème est résolu.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top