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 :

Calcule nombre d'occurrence par combinaison de valeur d'une même variable


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 Calcule nombre d'occurrence par combinaison de valeur d'une même variable
    Bonjour,

    Je fais appel à vous pour m'aider à réaliser une opération sur des données que je vais vous expliquer ci après.
    Dans le tableau que je veux analyser, j'ai plusieurs familles (ici dans l'exemples 5 famillies : aa, bb, cc, dd, ee) qui comporte deux enfants (noms des enfants dans la colonne ind). Chaque enfant a un diagnostique 1,2,3...


    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
     
    ind= c("A1", "A2", "C4", "D8", "D9", "A7", "E8", "A9", "Z7", "I8")
    fam= c("aa", "aa", "bb", "bb", "cc", "cc", "dd", "dd", "ee", "ee")
    diag= c(1,1,1,2,2,1,2,2, 2,3)
     
    data.frame(ind, fam, diag)
       ind fam diag
    1   A1  aa    1
    2   A2  aa    1
    3   C4  bb    1
    4   D8  bb    2
    5   D9  cc    2
    6   A7  cc    1
    7   E8  dd    2
    8   A9  dd    2
    9   Z7  ee    2
    10  I8  ee    3
    J'aimerai pouvoir calculer le nombre de famille ayant


    - deux enfants avec le diagnostique 1,
    - deux enfants avec le diagnostique 2....
    - un enfant avec le diagnostique 1 et un enfant avec le diagnostique 2
    - un enfant avec le diagnostique 1 et un enfant avec le diagnostique 3


    et ainsi de suite avec les autres types de combinaison de diagnostique

    J'aimerai également que le code puisse être adapté aux familles qui auraient également plus de deux enfants ou aux cas où il y aurait plus de 3 diagnostiques différents

    J'ai réussi a compter le nombre de famille "différentes" selon le diagnostique quand il n'y a qu'un enfant (avec group_by(diagnosis) et count() de Tydiverse, mais je n'arrive pas à saisir comment faire quand il y a deux enfants ou plus car les combinaison que je veux voir sont dans la même variable.

    J'imagine qu'une idée serait de reformater les données en ajoutant de nouvelles variables diagnosis pour chaque enfants, mais après plusieurs tentatives, je n'ai pas trouvé la bonne piste

    Quelqu'un aurait une idée pour m'aider à faire cette opération,

    Merci d'avance,

    Aline

  2. #2
    Expert confirmé
    Avatar de olivier.decourt
    Homme Profil pro
    Formateur R/SAS/statistiques
    Inscrit en
    Avril 2008
    Messages
    2 064
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France

    Informations professionnelles :
    Activité : Formateur R/SAS/statistiques
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 064
    Points : 4 478
    Points
    4 478
    Par défaut
    Bonjour Aline.
    Déjà on pourrait compter par famille et diagnostic.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    library(tidyverse)
     
    donnees <- data.frame(
      ind= c("A1", "A2", "C4", "D8", "D9", "A7", "E8", "A9", "Z7", "I8"),
      fam= c("aa", "aa", "bb", "bb", "cc", "cc", "dd", "dd", "ee", "ee"),
      diag= c(1,1,1,2,2,1,2,2, 2,3))
     
    donnees %>% 
      group_by(fam, diag) %>% 
      count()
    Je pense que ce n'est pas ce que tu cherches mais c'est un début : on voit combien d'enfants a chaque famille pour chaque diagnostic.

    On peut aussi obtenir des stats plus synthétiques par famille.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    donnees %>% 
      arrange(fam, diag) %>%
      group_by(fam) %>% 
      summarise(nb_enfants = n(),
                nb_diagnostics = n_distinct(diag),
                diag_list = paste(unique(diag), collapse = "/"))
    Sur cette base-là on peut compter les familles par combinaison de diagnostics :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    donnees %>% 
      arrange(fam, diag) %>% 
      group_by(fam) %>% 
      summarise(diag_list = paste(unique(diag), collapse = "/")) %>% 
      group_by(diag_list) %>% 
      count()
    On peut aussi vouloir l'organiser en tableau croisé, soit sous forme de data.frame avec pivot_wider de {tidyr} soit sous forme de matrice avec un simple table de {base}.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    donnees %>% 
      pivot_wider(id_cols = fam,
                  names_from = diag,
                  values_from = ind,
                  values_fn = length,
                  values_fill = 0)
     
    table(donnees$fam,
          donnees$diag)
    Bon courage.
    Olivier

  3. #3
    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
    Bonjour,

    Merci beaucoup pour votre aide. J'avais essayé la première idée en effet mais ça ne me donnait pas exactement ce que je voulais. Ce qu'il me manquait c'était l'étape du summarise qui permet de rajouter les différentes combinaison.

    Cela ma permis de finaliser car en fait c'était ce type de tableau (voir fin du code ci dessous) que j'attendais (j'ai rajouté deux famille a trois enfants pour voir si cela marchait et tout est bon !)

    J'ai aussi enlevé le unique dans la fonction summarise car je voulais vraiment toutes les combinaison de façon précise et lorsqu'une famille a trois enfants dont deux enfants avec diag 1 et un enfant avec diag 2 la sortie 1/2 ne permettait pas de savoir combien d'enfants avait le diag1 et combien avait le diag2.

    Encore une fois merci, j'adore ce forum qui me permet d'apprendre de nouvelles fonctions que j'arrive toujours a utiliser dans mes scripts ultérieurs.

    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
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
     
    library(tidyverse)
    donnees <- data.frame(
      ind= c("A1", "A2", "C4", "D8", "D9", "A7", "E8", "A9", "Z7", "I8", "T1","T2", "T3","R1", "R2", "R3"),
      fam= c("aa", "aa", "bb", "bb", "cc", "cc", "dd", "dd", "ee", "ee","gg","gg", "gg","hh", "hh", "hh"),
      diag= c(1,1,1,2,2,1,2,2, 2,3,1,1,1,1,2,1))
     
    > donnees
       ind fam diag
    1   A1  aa    1
    2   A2  aa    1
    3   C4  bb    1
    4   D8  bb    2
    5   D9  cc    2
    6   A7  cc    1
    7   E8  dd    2
    8   A9  dd    2
    9   Z7  ee    2
    10  I8  ee    3
    11  T1  gg    1
    12  T2  gg    1
    13  T3  gg    1
    14  R1  hh    1
    15  R2  hh    2
    16  R3  hh    1
     
    donnees %>% 
      arrange(fam, diag) %>%
      group_by(fam) %>% 
      summarise(nb_enfants = n(),
                nb_diagnostics = n_distinct(diag),
                diag_list = paste((diag), collapse = "/"))%>%
      group_by(nb_enfants)%>%
      group_by(diag_list, .add=TRUE)%>%
      count()
     
    # A tibble: 6 x 3
    # Groups:   nb_enfants, diag_list [6]
      nb_enfants diag_list     n
           <int> <chr>     <int>
    1          2 1/1           1
    2          2 1/2           2
    3          2 2/2           1
    4          2 2/3           1
    5          3 1/1/1         1
    6          3 1/1/2         1
    Bonne soirée,

    Aline

Discussions similaires

  1. Réponses: 2
    Dernier message: 13/09/2014, 15h57
  2. Liaison par combinaison de valeurs en SQL
    Par yassineonline2013 dans le forum Langage SQL
    Réponses: 18
    Dernier message: 24/05/2013, 17h51
  3. Plusieurs valeurs d'une même variable : colonnes
    Par derfer dans le forum Débutez
    Réponses: 4
    Dernier message: 02/12/2012, 18h24
  4. Réponses: 2
    Dernier message: 21/04/2009, 08h16
  5. [WD12] calcul nombre de jours par semaine
    Par heiti dans le forum WinDev
    Réponses: 6
    Dernier message: 30/10/2008, 21h11

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