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 :

Combinaisons + disjonctif complet


Sujet :

R

  1. #1
    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 Combinaisons + disjonctif complet
    Bonjour à tous,

    Je vais essayer d'exposer mon problème le plus clairement possible...
    Je suis à la recherche d'une fonction R qui me permettrait de passer de la matrice P à la matrice Z suivantes :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    P<-t(combn(4,2))
    P
         [,1] [,2]
    [1,]    1    2
    [2,]    1    3
    [3,]    1    4
    [4,]    2    3
    [5,]    2    4
    [6,]    3    4
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    Z
         [,1] [,2] [3,] [4,]
    [1,]   1    1    0    0
    [2,]   1    0    1    0
    [3,]   1    0    0    1
    [4,]   0    1    1    0
    [5,]   0    1    0    1
    [6,]   0    0    1    1
    Ou bien qui me permettrait d'obtenir directement la matrice Z...


    Pour le moment j'ai réussi à obtenir ce que je souhaite en passant la matrice P au format disjonctif complet (fontion "acm.disjonctif" du package "ade4" par exemple) et avec une bidouille pour sommer les colonnes ayant le même nom.

    Voilà, si vous souhaitez que je donne des précisions, n'hésitez pas.
    Merci d'avance


    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.

  2. #2
    Membre averti
    Femme Profil pro
    Inscrit en
    Septembre 2009
    Messages
    272
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Septembre 2009
    Messages : 272
    Points : 417
    Points
    417
    Par défaut
    Bonsoir,
    pour l'instant, je n'ai trouvé que du bidouillage

    Voici quand même le code, si cela peut vous "inspirer":
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    for (i in 1:4){
     ind <- which(P == i)
     test <- which(ind > 6)
     ind[test] <- ifelse(is.na(test), test, ind[test] %% 6)
     ind[ind == 0] <- 6 # car 12 modulo 6 vaut 0...
     mat[ind , i] <- 1
    }
    Oui, oui, je n'ai pas levé la boucle "for"

    Bon week-end
    Lilly

  3. #3
    Membre averti
    Homme Profil pro
    Inscrit en
    Août 2007
    Messages
    125
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Août 2007
    Messages : 125
    Points : 339
    Points
    339
    Par défaut
    Bonsoir,

    Voici une autre proposition:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    # Cette fonction produit un vecteur de taille "lengthVect" où les éléments en position "pos" sont à "1".
    fct <- function(pos,lengthVect){
       res <- rep(0,lengthVect)
       for(ii in pos) res[ii] <- 1
       return(res)
    }
     
    P<-t(combn(4,2))
    Z<- t(apply(P,1,fct,lengthVect=4))
    Et voici des exemples de résultats:
    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
     
    P<-t(combn(4,2))
    Z<- t(apply(P,1,fct,lengthVect=4))
    > print(P)
         [,1] [,2]
    [1,]    1    2
    [2,]    1    3
    [3,]    1    4
    [4,]    2    3
    [5,]    2    4
    [6,]    3    4
    > print(Z)
         [,1] [,2] [,3] [,4]
    [1,]    1    1    0    0
    [2,]    1    0    1    0
    [3,]    1    0    0    1
    [4,]    0    1    1    0
    [5,]    0    1    0    1
    [6,]    0    0    1    1
    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
     
    P<-t(combn(5,3))
    Z<- t(apply(P,1,fct,lengthVect=5))
    > print(P)
          [,1] [,2] [,3]
     [1,]    1    2    3
     [2,]    1    2    4
     [3,]    1    2    5
     [4,]    1    3    4
     [5,]    1    3    5
     [6,]    1    4    5
     [7,]    2    3    4
     [8,]    2    3    5
     [9,]    2    4    5
    [10,]    3    4    5
    > print(Z)
          [,1] [,2] [,3] [,4] [,5]
     [1,]    1    1    1    0    0
     [2,]    1    1    0    1    0
     [3,]    1    1    0    0    1
     [4,]    1    0    1    1    0
     [5,]    1    0    1    0    1
     [6,]    1    0    0    1    1
     [7,]    0    1    1    1    0
     [8,]    0    1    1    0    1
     [9,]    0    1    0    1    1
    [10,]    0    0    1    1    1
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    > P<-t(combn(3,2))
    > Z<- t(apply(P,1,fct,lengthVect=3))
    > print(P)
         [,1] [,2]
    [1,]    1    2
    [2,]    1    3
    [3,]    2    3
    > print(Z)
         [,1] [,2] [,3]
    [1,]    1    1    0
    [2,]    1    0    1
    [3,]    0    1    1
    J'espère que je vous ai aidé.

  4. #4
    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
    Merci à tous les deux pour vos réponses !

    Ce sont effectivement de bonnes alternatives à ce que j'avais fait (où je me complique quand même un peu la vie en passant par la fonction "acm.disjonctif" du package "ade4").
    Je me demandais juste si une telle fonction existait déjà dans un des nombreux packages de R, mais peut-être pas...

    Encore merci !


    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. [Sources/Macros] Tableau Disjonctif Complet (TDC)
    Par Haache dans le forum Contribuez
    Réponses: 0
    Dernier message: 14/04/2015, 18h29
  2. ACM : tableau disjonctif complet
    Par Audrey2708 dans le forum SAS STAT
    Réponses: 3
    Dernier message: 14/04/2015, 17h21
  3. Convertir un fichier Excel en un Tableau Disjonctif Complet en Java
    Par ransou_mkhinini dans le forum Autres outils décisionnels
    Réponses: 1
    Dernier message: 08/04/2015, 11h56

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