Options pour la fonction summary sur un data frame

Postez ici vos questions, réponses, commentaires ou suggestions - Les sujets seront ultérieurement répartis dans les archives par les modérateurs

Modérateur : Groupe des modérateurs

Lionel Fugon
Messages : 23
Enregistré le : 07 Aoû 2007, 10:55

Options pour la fonction summary sur un data frame

Messagepar Lionel Fugon » 03 Mar 2009, 17:19

Bonjour,

j'utilise souvent la fonction summary pour connaître les détails des variables contenues dans mes data.frame. Cela fonctionne bien mais j'aimerais que dans le cas de variable quali, en plus de me donner le nombre de données relatives à chaque modalité, avoir le pourcentage associé. C'est peut-être juste une option dans summary mais je ne la trouve pas.

Merci d'avance.

PS : l'objectif final est de passer un fichier SPSS en entrée présenté sous une certaine forme (variables quali en premier et ensuite variable quanti) et obtenir un fichier HTML de stat descriptives du contenu. Pour ceux que ça intéresse, le code est le suivant :

###########chargement des librairies##########

library(R2HTML);
library(tcltk);
library(tcltk2);
library(foreign);

###########chargement du fichier SPSS##########

name <- tclvalue(tkgetOpenFile(filetypes="{{SPSS Files} {.sav}} {{All files} *}"))
if (name=="") return;
tab=read.spss(name, use.value.labels = TRUE, to.data.frame =TRUE,
max.value.labels = Inf, trim.factor.names = FALSE, trim_values = TRUE, reencode = NA);

###########modification du type de données##########

nbr_var_cont=2 #### Nombre de variables continues dans la base

for (i in 2:(ncol(tab)-(nbr_var_cont))){

tab[,i]=factor(tab[,i], exclude = NA);

}

a=t(summary(tab))

###########création du fihier HTML##########

target <- HTMLInitFile(getwd(),filename=format(Sys.time(), "%H-%M__%d-%m-%Y "), BackGroundColor="#FFFFFF")

HTML("<head><b><center>DESCRIPTIVE STATISTICS</center></b></head>",file=target)

HTML(a,file=target,Border=1,innerBorder=1,align="center",classfirstline = "firstline", classfirstcolumn = "firstcolumn",classcellinside = "cellinside", classtable = "dataframe");

HTMLEndFile()

Renaud Lancelot
Messages : 2484
Enregistré le : 16 Déc 2004, 08:01
Contact :

Re: Options pour la fonction summary sur un data frame

Messagepar Renaud Lancelot » 03 Mar 2009, 18:09

Lionel Fugon a écrit :Bonjour,

j'utilise souvent la fonction summary pour connaître les détails des variables contenues dans mes data.frame. Cela fonctionne bien mais j'aimerais que dans le cas de variable quali, en plus de me donner le nombre de données relatives à chaque modalité, avoir le pourcentage associé. C'est peut-être juste une option dans summary mais je ne la trouve pas.


Voir par exemple la fonction ctab dans le package tdisplay disponible sur ce forum:

Code : Tout sélectionner

> library(tdisplay)
Loading required package: tcltk
Loading Tcl/Tk interface ... done
Loading required package: RODBC
Package tdisplay, version 0.3-0
> ?tdisplay
Help for ‘tdisplay’ is shown in the browser
> example(ctab)

ctab> #=== Example of the 3 types of data managed by ctab
ctab>
ctab>     # Split data
ctab>
ctab> mydata <- data.frame(
ctab+     treatment = c("B", "A", "C", "C", "B", "B", "C", "A", "B", "B"),
ctab+     surv = c("YES", "NO", "YES", "YES", "NO", "NO", "NO", "YES", "YES", "NO")
ctab+     )

ctab> mydata
   treatment surv
1          B  YES
2          A   NO
3          C  YES
4          C  YES
5          B   NO
6          B   NO
7          C   NO
8          A  YES
9          B  YES
10         B   NO

ctab> ctab(formula = surv ~ treatment, data = mydata)

ctab(formula = surv ~ treatment, data = mydata)

Contingency table 3-by-2


$ Counts:

          surv NO YES Total
treatment                 
A               1   1     2
B               3   2     5
C               1   2     3


$ Row proportions (%):

          surv    NO   YES
treatment                 
A              50.00 50.00
B              60.00 40.00
C              33.33 66.67


ctab>     # Grouped data with weights
ctab>
ctab> mydata <- data.frame(
ctab+     treatment = c("A", "B", "C", "A", "B", "C"),
ctab+     surv = c("NO", "NO", "NO", "YES", "YES", "YES"),
ctab+     n = c(1, 3, 1, 1, 2, 2)
ctab+     )

ctab> mydata
  treatment surv n
1         A   NO 1
2         B   NO 3
3         C   NO 1
4         A  YES 1
5         B  YES 2
6         C  YES 2

ctab> ctab(formula = surv ~ treatment, data = mydata, weights = n)

ctab(formula = surv ~ treatment, data = mydata, weights = n)

Contingency table 3-by-2


$ Counts:

          surv NO YES Total
treatment                 
A               1   1     2
B               3   2     5
C               1   2     3


$ Row proportions (%):

          surv    NO   YES
treatment                 
A              50.00 50.00
B              60.00 40.00
C              33.33 66.67


ctab>     # Grouped data of the form "cbind(success, failure)"
ctab>
ctab> mydata <- data.frame(
ctab+     treatment = c("A", "B", "C"),
ctab+     surv = c(1, 2, 2),
ctab+     death = c(1, 3, 1)
ctab+     )

ctab> mydata
  treatment surv death
1         A    1     1
2         B    2     3
3         C    2     1

ctab> ctab(formula = cbind(surv, death) ~ treatment, data = mydata)

ctab(formula = cbind(surv, death) ~ treatment, data = mydata)

Contingency table 3-by-2


$ Counts:

          surv 0 1 Total
treatment               
A              1 1     2
B              3 2     5
C              1 2     3


$ Row proportions (%):

          surv     0     1
treatment                 
A              50.00 50.00
B              60.00 40.00
C              33.33 66.67


ctab> #=== Examples of tables
ctab>
ctab> n <- 200

ctab> mydata <- data.frame(
ctab+     y1 = sample(1:2, n, replace = TRUE),
ctab+     y2 = sample(1:2, n, replace = TRUE),
ctab+     y3 = sample(1:3, n, replace = TRUE),
ctab+     y4 = sample(1:4, n, replace = TRUE)
ctab+     )

ctab> head(mydata)
  y1 y2 y3 y4
1  1  1  3  1
2  2  1  3  2
3  2  1  3  2
4  2  1  2  1
5  2  2  3  1
6  2  1  3  2

ctab> ctab(formula = y3 ~ 1, data = mydata)

ctab(formula = y3 ~ 1, data = mydata)

Contingency table 1-by-3


$ Counts:

y3
    1     2     3 Total
   50    67    83   200


$ Row proportions (%):

y3
   1    2    3
25.0 33.5 41.5


ctab> ctab(formula = y3 ~ 1, data = mydata, digits = 4)

ctab(formula = y3 ~ 1, data = mydata, digits = 4)

Contingency table 1-by-3


$ Counts:

y3
    1     2     3 Total
   50    67    83   200


$ Row proportions (%):

y3
   1    2    3
25.0 33.5 41.5


ctab> ctab(formula = y3 ~ 1, data = mydata)$counts
  y3 n.ctab
1  1     50
2  2     67
3  3     83

ctab> res <- ctab(formula = y3 ~ y1, data = mydata)

ctab> res$tab
   y3
y1   1  2  3
  1 17 28 46
  2 33 39 37

ctab> res$counts
  y1 y3 n.ctab
1  1  1     17
2  2  1     33
3  1  2     28
4  2  2     39
5  1  3     46
6  2  3     37

ctab> ctab(formula = y3 ~ y1 + y2, data = mydata)

ctab(formula = y3 ~ y1 + y2, data = mydata)

Contingency table 2-by-3-by-2


$ Counts:

      y3  1  2  3 Total
y1 y2                 
1  1     12 12 27    51
   2      5 16 19    40
2  1     12 26 18    56
   2     21 13 19    53


$ Row proportions (%):

      y3     1     2     3
y1 y2                     
1  1     23.53 23.53 52.94
   2     12.50 40.00 47.50
2  1     21.43 46.43 32.14
   2     39.62 24.53 35.85


ctab> ctab(formula = y3 ~ y1 + y2 + y4, data = mydata)

ctab(formula = y3 ~ y1 + y2 + y4, data = mydata)

Contingency table 4-by-3-by-2-by-2


$ Counts:

         y3  1  2  3 Total
y1 y2 y4                 
1  1  1      3  3  7    13
      2      4  3  9    16
      3      4  1  5    10
      4      1  5  6    12
   2  1      1  2  6     9
      2      1  3  3     7
      3      1  4  2     7
      4      2  7  8    17
2  1  1      2  7  3    12
      2      2  7  7    16
      3      3  3  5    11
      4      5  9  3    17
   2  1      2  2  6    10
      2      4  5  2    11
      3      5  2  4    11
      4     10  4  7    21


$ Row proportions (%):

         y3     1     2     3
y1 y2 y4                     
1  1  1     23.08 23.08 53.85
      2     25.00 18.75 56.25
      3     40.00 10.00 50.00
      4      8.33 41.67 50.00
   2  1     11.11 22.22 66.67
      2     14.29 42.86 42.86
      3     14.29 57.14 28.57
      4     11.76 41.18 47.06
2  1  1     16.67 58.33 25.00
      2     12.50 43.75 43.75
      3     27.27 27.27 45.45
      4     29.41 52.94 17.65
   2  1     20.00 20.00 60.00
      2     36.36 45.45 18.18
      3     45.45 18.18 36.36
      4     47.62 19.05 33.33


Lionel Fugon
Messages : 23
Enregistré le : 07 Aoû 2007, 10:55

Messagepar Lionel Fugon » 04 Mar 2009, 09:16

Ok merci beaucoup, je vais regarder de plus près ce package.

Lionel


Retourner vers « Questions en cours »

Qui est en ligne

Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 1 invité