IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

R Discussion :

Transformer un tibble


Sujet :

R

  1. #1
    Membre à l'essai
    Femme Profil pro
    Étudiant
    Inscrit en
    Janvier 2021
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 32
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2021
    Messages : 18
    Points : 13
    Points
    13
    Par défaut Transformer un tibble



    Bonjour,

    J'ai à nouveau quelque soucis dans l'analyse de certaines données.

    Point1: J'ai un tableau (voir les premières lignes ci dessous) avec une colonne Verif et une colonne taille et je voudrais dans un premier temps avoir le % de chaque facteur de verif en fonction de différents intervalles de taille. J'ai plus ou moins réussi avec la fonction cut de tydiverse mais lorsque je n'ai pas certaines taille pour un facteur ça ne le prends pas en compte (exemple j'ai aucune taille entre 20 et 30 pour "lundi2" et j'aimerai que ces tailles apparaissent en mettant 0).

    Comment pourrais-je régler ces deux soucis ?


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
                     Verif      Taille
    2                Lundi1         28
    4                Lundi2         12
    7                Lundi2          3
    20               Lundi2          5
    24                 NA            1
    36               Lundi1          1
    40               Lundi1          4
    50               Jeudi1          1
    52               Lundi1          18
    53               Lundi1          1

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    resume= tab %>%
      group_by(Verif) %>% 
      group_by(size = cut(Taille,breaks=c(0,11,20,30,40,50,60,300)), .add = TRUE) %>% 
      count() %>% 
      ungroup() %>% 
      group_by(size) %>% 
      mutate(pct = round(n/sum(n)*100,2),)
    J'obtiens donc grâce à ce code ce tableau (avec le nombre d'occurrence en 3ieme colonne et le pourcentage en 4ième colonne)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    # A tibble: 16 x 4
    # Groups:   size [7]
       size     Verif     n   pct
       <fct>    <chr>                <int> <dbl>
     1 (0,11]   Lundi1                  10  7.04
     2 (0,11]   Mardi1                  10  7.04
     3 (0,11]   NA                     122 85.9 
     4 (11,20]  Lundi1                   1  4.17
     5 (11,20]  Mardi1                   1  4.17
     6 (11,20]  NA                      22 91.7 
     7 (20,30]  Mardi1                   3 14.3 
     8 (20,30]  NA                      18 85.7 
     9 (30,40]  Lundi1                   1 11.1 
    10 (30,40]  NA                       8 88.9 
    11 (40,50]  Mardi1                   1  8.33
    12 (40,50]  NA                      11 91.7 
    13 (50,60]  Lundi1                   2 22.2 
    14 (50,60]  NA                       7 77.8 
    15 (60,300] Jeudi1                   5 11.9 
    16 (60,300] NA                      37 88.1
    Point2: Mais j'aimerai pouvoir ensuite le transformer en tableau à double entré avec en lignes les différents facteurs "lundi1" "mardi1" "jeudi1" (sans celui ci " ") et en colonnes les différents intervalles de tailles et à l'intersection des lignes et des colonnes je voudrais le pourcentage correspondant comme sur l'image ci dessous. Et enfin j'aimerai rajouter une dernière ligne "nombre" avec la somme du nombre de tailles comprises dans chaque intervalles (voir également image ci dessous).

    Quelle fonction pourrais je utiliser pour faire cela ?

    J'ai vu pas mal de fonctions qui transforment un tableau en faisant pivoter des colonnes en lignes ou inversement en fonction d'une colonne/ ligne qui ne bouge pas, mais je n'ai rien vu pour mettre les valeurs d'une variable en intersection de deux autres...

    Nom : tableau résumé2.PNG
Affichages : 146
Taille : 5,0 Ko

    Merci d'avance pour votre aide

    Aline

  2. #2
    Membre expérimenté
    Inscrit en
    Novembre 2009
    Messages
    703
    Détails du profil
    Informations forums :
    Inscription : Novembre 2009
    Messages : 703
    Points : 1 311
    Points
    1 311
    Par défaut Tableaux de fréquences, transposition
    Bonjour,

    Pourquoi ne pas calculer les pourcentages avec les fonctions table() et prop.table() :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    tab <- read.table(header = TRUE, stringsAsFactors = TRUE, text =  "
    Verif      Taille
    Lundi1         28
    Lundi2         12
    Lundi2          3
    Lundi2          5
    NA              1
    Lundi1          1
    Lundi1          4
    Jeudi1          1
    Lundi1         18
    Lundi1          1
    ")
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    tab$Taille_c <- cut(tab$Taille,breaks=c(0,11,20,30))
    tab_freq <- table(tab$Verif, tab$Taille_c, useNA = "ifany", deparse.level=2)
    round(prop.table(tab_freq,1),2)
    #>          tab$Taille_c
    #> tab$Verif (0,11] (11,20] (20,30]
    #>    Jeudi1   1.00    0.00    0.00
    #>    Lundi1   0.60    0.20    0.20
    #>    Lundi2   0.67    0.33    0.00
    #>    <NA>     1.00    0.00    0.00
     
    # Created on 2021-02-26 by the reprex package (v0.3.0.9001)
    Quant à votre question concernant la transposition, vous pouvez utiliser la fonction dcast() du package reshape2 :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    tab <- read.table(header = TRUE, text =  "
    size     Verif     n   pct
    (0,11]   Lundi1   10  7.04
    (0,11]   Mardi1   10  7.04
    (0,11]   NA      122 85.9 
    (11,20]  Lundi1    1  4.17
    (11,20]  Mardi1    1  4.17
    (11,20]  NA       22 91.7 
    (20,30]  Mardi1    3 14.3 
    (20,30]  NA       18 85.7 
    (30,40]  Lundi1    1 11.1 
    (30,40]  NA        8 88.9 
    (40,50]  Mardi1    1  8.33
    (40,50]  NA       11 91.7 
    (50,60]  Lundi1    2 22.2 
    (50,60]  NA        7 77.8 
    (60,300] Jeudi1    5 11.9 
    (60,300] NA       37 88.1
    ")
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    pct <- reshape2::dcast(tab, Verif ~ size, fill = 0, value.var="pct")
    nb <- reshape2::dcast(tab, Verif ~ size, fill = 0, value.var="n")
    total <- cbind(Verif="Nombre", as.data.frame(t(colSums(nb[,-1]))))
    pct <- rbind(pct, total)
    pct
    #>    Verif (0,11] (11,20] (20,30] (30,40] (40,50] (50,60] (60,300]
    #> 1 Jeudi1   0.00    0.00     0.0     0.0    0.00     0.0     11.9
    #> 2 Lundi1   7.04    4.17     0.0    11.1    0.00    22.2      0.0
    #> 3 Mardi1   7.04    4.17    14.3     0.0    8.33     0.0      0.0
    #> 4   <NA>  85.90   91.70    85.7    88.9   91.70    77.8     88.1
    #> 5 Nombre 142.00   24.00    21.0     9.0   12.00     9.0     42.0
     
    # Created on 2021-02-26 by the reprex package (v0.3.0.9001)
    Cordialement,

Discussions similaires

  1. [PERL] transformation de fichier
    Par bob20000 dans le forum Langage
    Réponses: 6
    Dernier message: 27/07/2006, 11h13
  2. transformer un fichire Xml en pdf
    Par SuperFoustan dans le forum XML/XSL et SOAP
    Réponses: 3
    Dernier message: 21/02/2003, 11h45
  3. transformer un jour en JJ/MM/AA
    Par gemini_010 dans le forum Algorithmes et structures de données
    Réponses: 8
    Dernier message: 08/11/2002, 22h55
  4. Transformer un caractère en type énuméré
    Par HT dans le forum Langage
    Réponses: 3
    Dernier message: 22/10/2002, 20h46
  5. FFT(Fast Fourier Transform)
    Par IngBen dans le forum Traitement du signal
    Réponses: 6
    Dernier message: 23/05/2002, 16h35

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo