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 :

Ensemble des combinaisons de paires possibles


Sujet :

R

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Statisticien
    Inscrit en
    Août 2011
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Statisticien
    Secteur : Santé

    Informations forums :
    Inscription : Août 2011
    Messages : 16
    Points : 27
    Points
    27
    Par défaut Ensemble des combinaisons de paires possibles
    Bonjour,
    je voudrais savoir s'il y avait une fonction qui permettrait d'obtenir le nombre et l'affichage des combinaisons de paires possibles d'un ensemble.

    Exemple pour l'ensemble {A, B, C, D}
    -Le nombre de combinaisons de paires est 3:{(A,B);(C,D)}; {(A,C);(B,D)};{(A,D);(B,C)}

    Merci,
    Benoît

  2. #2
    Modératrice

    Femme Profil pro
    Statisticienne, Fondatrice de la société DACTA
    Inscrit en
    Juin 2010
    Messages
    893
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 35
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Statisticienne, Fondatrice de la société DACTA

    Informations forums :
    Inscription : Juin 2010
    Messages : 893
    Points : 2 673
    Points
    2 673
    Par défaut
    Bonjour,

    Spontanément (et sans assez réfléchir), j'ai voulu répondre de voir du côté de la fonction "combn" qui donne toutes les combinaisons possibles de k éléments parmis un ensemble donné (par exemple c("A","B","C","D")).
    Cependant, cela ne semble pas répondre à votre problématique (désolée ) qui est de récupérer les "combinaisons de paires", et j'avoue ne pas avoir connaissance d'une fonction faisant cela directement, mais au cas où vous ne connaîtriez pas la fonction "combn", peut être qu'il y a des choses à explorer de ce côté-ci...

    Bonne continuation


    Cordialement,

    A.D.

    Forum R
    Fournir le code utilisé (pensez aux balises code !), les packages nécessaires, ainsi qu'un court mais représentatif extrait du jeu de données et les éventuels messages d'erreur.
    Recherche d'informations concernant R : RSiteSearch / tutoriels : http://r.developpez.com/cours/ .

    Pensez également au bouton "Résolu" et à voter (en bas à droite des messages) lorsque vous avez obtenu une réponse satisfaisante.

  3. #3
    Membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Mai 2010
    Messages
    40
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2010
    Messages : 40
    Points : 41
    Points
    41
    Par défaut
    ça va rejoindre la réponse d'A.D. mais il y a aussi la fonction combinations qui possède pas mal de possibilités
    C'est peut-etre un peu long (et d'ailleurs je ne suis même pas sûr que tu arrives au résultat que tu veux!!!) mais pourquoi ne pas faire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    c=combinations(4,3,letters[1:4])
    duplicated(c[,-3])
    Après il faut compter le nombre de FALSE...

    C'est juste un début de piste!

  4. #4
    Nouveau membre du Club
    Homme Profil pro
    Statisticien
    Inscrit en
    Août 2011
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Statisticien
    Secteur : Santé

    Informations forums :
    Inscription : Août 2011
    Messages : 16
    Points : 27
    Points
    27
    Par défaut
    Ok,
    merci à vous je regarde ça demain et je vous tiens au courant.

    Merci bien!

  5. #5
    Membre expert
    Avatar de pitipoisson
    Homme Profil pro
    Chercheur
    Inscrit en
    Septembre 2006
    Messages
    1 942
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Chercheur
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Septembre 2006
    Messages : 1 942
    Points : 3 378
    Points
    3 378
    Par défaut
    Bonjour,
    Citation Envoyé par A. D. Voir le message
    Spontanément (et sans assez réfléchir), j'ai voulu répondre de voir du côté de la fonction "combn" qui donne toutes les combinaisons possibles de k éléments parmis un ensemble donné (par exemple c("A","B","C","D")).
    Cependant, cela ne semble pas répondre à votre problématique (désolée ) qui est de récupérer les "combinaisons de paires", et j'avoue ne pas avoir connaissance d'une fonction faisant cela directement, mais au cas où vous ne connaîtriez pas la fonction "combn", peut être qu'il y a des choses à explorer de ce côté-ci...
    Je pense que la piste n'est pas mauvaise, à condition d'utiliser l'imbrication de 2 combn :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    > combn(apply(combn(letters[1:4], 2),
    +             2,
    +             paste,
    +             collapse=","),
    +       2)
         [,1]  [,2]  [,3]  [,4]  [,5]  [,6]  [,7]  [,8]  [,9]  [,10] [,11] [,12]
    [1,] "a,b" "a,b" "a,b" "a,b" "a,b" "a,c" "a,c" "a,c" "a,c" "a,d" "a,d" "a,d"
    [2,] "a,c" "a,d" "b,c" "b,d" "c,d" "a,d" "b,c" "b,d" "c,d" "b,c" "b,d" "c,d"
         [,13] [,14] [,15]
    [1,] "b,c" "b,c" "b,d"
    [2,] "b,d" "c,d" "c,d"
    Forum LaTeX : pour des réponses rapides et appropriées, pensez à poster un
    ECM = Exemple (reproduit le problème) Complet (document compilable) Minimal (ne postez pas votre thèse !)

    Une solution vous convient ? N'oubliez pas le tag


    )><))))°>

  6. #6
    Nouveau membre du Club
    Homme Profil pro
    Statisticien
    Inscrit en
    Août 2011
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Statisticien
    Secteur : Santé

    Informations forums :
    Inscription : Août 2011
    Messages : 16
    Points : 27
    Points
    27
    Par défaut
    Bonjour,
    juste pour faire suite à ce message je suis toujours bloqué car la solution de pitipoisson ne correspond pas à ce que je recherche.
    En effet, la première colonne de la matrice de pitipoisson est:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
          [,1]  
    [1,] "a,b" 
    [2,] "a,c"
    or dans mon problème "a" ne peut apparaitre qu'une seule fois dans la colonne, c'est-à-dire soit dans la 1ère paire soit dans la seconde mais pas dans les 2.

    Je vous tiendrais au courant si je trouve une solution.

    Bonne journée.

  7. #7
    Modératrice

    Femme Profil pro
    Statisticienne, Fondatrice de la société DACTA
    Inscrit en
    Juin 2010
    Messages
    893
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 35
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Statisticienne, Fondatrice de la société DACTA

    Informations forums :
    Inscription : Juin 2010
    Messages : 893
    Points : 2 673
    Points
    2 673
    Par défaut
    Bonjour,

    Je ne sais pas s'il y a une fonction "toute prête" permettant de faire ce que vous recherchez, mais en bidouillant un peu je crois qu'on y arrive (il y a sûrement plus simple ! c'est juste une piste...) :

    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
    47
    48
    U<-combn(apply(combn(letters[1:4],2),2,paste,collapse=","),2)
    U
        [,1]  [,2]  [,3]  [,4]  [,5]  [,6]  [,7]  [,8]  [,9]  [,10] [,11] [,12]
    [1,] "a,b" "a,b" "a,b" "a,b" "a,b" "a,c" "a,c" "a,c" "a,c" "a,d" "a,d" "a,d"
    [2,] "a,c" "a,d" "b,c" "b,d" "c,d" "a,d" "b,c" "b,d" "c,d" "b,c" "b,d" "c,d"
         [,13] [,14] [,15]
    [1,] "b,c" "b,c" "b,d"
    [2,] "b,d" "c,d" "c,d"
     
    test_fun<-function(s,mat=U)
    {
    	test_grep<-function(v,tt=s)
    	{
    		p<-grep(tt,v)
    		if(length(p)!=1)
    		{
    			r<-TRUE
    		}
    		else
    		{
    			r<-FALSE
    		}
     
    		r
    	}	
     
    	y<-apply(mat,2,test_grep)
    }
     
    z<-sapply(letters[1:4],test_fun)
     
     
    which_true<-function(v)
    {
    	r<-which(v==TRUE)
    	r
    }
     
    S<-apply(z,2,which_true)
     
    S<-unique(as.vector(S))
     
     
    UU<-U[,-S]
    UU
         [,1]  [,2]  [,3] 
    [1,] "a,b" "a,c" "a,d"
    [2,] "c,d" "b,d" "b,c"

    Cordialement,

    A.D.

    Forum R
    Fournir le code utilisé (pensez aux balises code !), les packages nécessaires, ainsi qu'un court mais représentatif extrait du jeu de données et les éventuels messages d'erreur.
    Recherche d'informations concernant R : RSiteSearch / tutoriels : http://r.developpez.com/cours/ .

    Pensez également au bouton "Résolu" et à voter (en bas à droite des messages) lorsque vous avez obtenu une réponse satisfaisante.

  8. #8
    Nouveau membre du Club
    Homme Profil pro
    Statisticien
    Inscrit en
    Août 2011
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Statisticien
    Secteur : Santé

    Informations forums :
    Inscription : Août 2011
    Messages : 16
    Points : 27
    Points
    27
    Par défaut
    Merci beaucoup A.D.!
    Cela répond en grande partie à ce que je recherchais.

    J'ai modifié un peu le programme, mais le fond était là (surtout la fonction test_fun)

    Voici le code modifié que je vais pouvoir utiliser dans un autre programme:

    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
     
    U<-combn(apply(combn(letters[1:4],2),2,paste,collapse=","),2)
    U
         [,1]  [,2]  [,3]  [,4]  [,5]  [,6]  [,7]  [,8]  [,9]  [,10] [,11] [,12] [,13] [,14] [,15]
    [1,] "a,b" "a,b" "a,b" "a,b" "a,b" "a,c" "a,c" "a,c" "a,c" "a,d" "a,d" "a,d" "b,c" "b,c" "b,d"
    [2,] "a,c" "a,d" "b,c" "b,d" "c,d" "a,d" "b,c" "b,d" "c,d" "b,c" "b,d" "c,d" "b,d" "c,d" "c,d"
     
     
    test_fun<-function(s,mat=U)
    {
        test_grep<-function(v,tt=s)
        {
             p<-grep(tt,v)
             return(ifelse(length(p)<=1,TRUE,FALSE))
        }
     
         return(apply(mat,2,test_grep))
    }
     
    z<-sapply(letters[1:4],test_fun)
     
     
    WhichFalse<-function(VecBool)	which(VecBool==FALSE)
     
     
    S<-apply(z,2,WhichFalse)
     
    S<-sort(unique(unlist(S)))
     
     
    UU<-U[,-S]
    UU
         [,1]  [,2]  [,3] 
    [1,] "a,b" "a,c" "a,d"
    [2,] "c,d" "b,d" "b,c"
    Pour ma culture perso. une petite question:
    J'ai essayé de mettre test_grep en dehors de la fonction test_fun, mais cela ne fonctionne pas. Pourquoi? Problème sur les arguments?

    Merci,
    Benoît

  9. #9
    Modératrice

    Femme Profil pro
    Statisticienne, Fondatrice de la société DACTA
    Inscrit en
    Juin 2010
    Messages
    893
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 35
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Statisticienne, Fondatrice de la société DACTA

    Informations forums :
    Inscription : Juin 2010
    Messages : 893
    Points : 2 673
    Points
    2 673
    Par défaut
    Bonsoir Benoît,

    Contente d'avoir pu aider
    Après, peut-être qu'il existe une fonction déjà implémentée dans R (ou un de ses nombreux packages) pour ce genre de choses, mais je n'ai pas trouvé.

    Concernant la fonction "test_grep", je pense qu'elle ne peut pas être créée telle quelle en dehors de la fonction "test_fun" car elle prend en argument un argument de "test_fun" (s). Cela dit, il y a sûrement moyen de procéder d'une autre manière, après c'est à explorer.

    Bonne continuation en tout cas


    Cordialement,

    A.D.

    Forum R
    Fournir le code utilisé (pensez aux balises code !), les packages nécessaires, ainsi qu'un court mais représentatif extrait du jeu de données et les éventuels messages d'erreur.
    Recherche d'informations concernant R : RSiteSearch / tutoriels : http://r.developpez.com/cours/ .

    Pensez également au bouton "Résolu" et à voter (en bas à droite des messages) lorsque vous avez obtenu une réponse satisfaisante.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 7
    Dernier message: 09/07/2014, 15h46
  2. [E-02] Génération de l'ensemble des possibles
    Par Oupss dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 03/11/2008, 11h02
  3. génération des combinaisons possibles
    Par smh_master dans le forum Algorithmes et structures de données
    Réponses: 18
    Dernier message: 04/05/2008, 10h14
  4. Réponses: 2
    Dernier message: 22/07/2002, 18h02

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