3 votes

Tableau des moyennes (SD)

Je dispose d'un ensemble de données relativement important et je souhaite imprimer un tableau des moyennes et des écarts types pour des combinaisons de facteurs. J'aimerais les avoir dans un format comme celui-ci :

         A            B
test1    2.0 (1.0)    5.0 (2.0)
test2    6.3 (3.1)    2.1 (0.7)

Y a-t-il un moyen facile de le faire ?

Ce qui s'en rapproche le plus, c'est l'utilisation du tables::tabular (exemple minimal) :

# Example data
df = data.frame(
   group=c('A', 'A',  'A', 'B', 'B', 'B'),
   value=c(1,2,3,6,8,9))

# Print table     
library(tables)
tabular(value ~ group * (mean + sd), df)

... qui produit ceci :

       group               
       A        B          
       mean  sd mean  sd   
 value 2     1  7.667 1.52

Mais je n'ai pas trouvé de moyen efficace de transformer ce format en format mean (SD) format ci-dessus. Note : Ces exemples sont très minimaux. J'aurai une hiérarchie plus importante (actuellement 4 x (mean+sd) colonnes et 2 x 3 lignes) mais le problème fondamental est le même.

2voto

Chris Points 4631

A partir de data.table, nous pouvons utiliser dcast (y compris votre var de test) :

library(data.table)

df = data.frame(
  group=c('A', 'A',  'A', 'B', 'B', 'B','A', 'A',  'A', 'B', 'B', 'B'),
  value=c(1,2,3,6,8,9,1,2,3,6,8,9),
  test=c(1,1,1,1,1,1,2,2,2,2,2,2))

dcast(df, test ~ group, fun.aggregate = function(x){
  paste(round(mean(x),1)," (", round(sd(x),1),")", sep = "")
})
  test     A         B
1    1 2 (1) 7.7 (1.5)
2    2 2 (1) 7.7 (1.5)

2voto

jdobres Points 4500
library(reshape2)

formatted.table <- dcast(df, 'value' ~ group, fun.aggregate = function(x) {
    return(sprintf('%0.1f (%0.1f)', mean(x), sd(x)))
})

# "value"         A         B
#   value 2.0 (1.0) 7.7 (1.5)

Similaire à la réponse de Chris, mais un peu plus propre (et pas de variable "test" nécessaire).

Vous pouvez également effectuer ce type d'agrégation avec la fonction dplyr paquet.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X