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 3 colonnes VRAI FAUX en 1 colonnes 3 categories


Sujet :

R

  1. #1
    Membre éclairé
    Inscrit en
    Janvier 2003
    Messages
    604
    Détails du profil
    Informations forums :
    Inscription : Janvier 2003
    Messages : 604
    Par défaut Transformer 3 colonnes VRAI FAUX en 1 colonnes 3 categories
    Bonjour, j'ai le dataframe suivant :
    Gpe1Categorie Gpe2Categorie Gpe3Categorie
    [1,] FALSE TRUE FALSE
    [2,] TRUE FALSE FALSE
    ...
    [22,] FALSE TRUE FALSE
    [23,] FALSE FALSE TRUE
    Je souhaite obtenir à la place une seule colonne avec les categories.

    Colonne Resultat
    2
    1
    ..
    3
    Je pensais pourvoir faire cela,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    CalculCumule<-ifelse(ListeDesGroupes[Gpe1Categorie]==TRUE,1,ifelse(ListeDesGroupes[Gpe2Categorie]==TRUE,2,ifelse(ListeDesGroupes[Gpe3Categorie]==TRUE,3,"x")))
    Mais je récupere 41 lignes qui ne correspondent pas, quelle serait la bonne méthode pour obtenir le résultat escompté ?
    Merci d'avance

  2. #2
    Membre averti
    Femme Profil pro
    Étudiant
    Inscrit en
    Mars 2019
    Messages
    27
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 31
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2019
    Messages : 27
    Par défaut
    Bonjour,
    Si j'ai bien compris se que vous souhaitez, voila une méthode pour l'obtenir

    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
    data77 = as.data.frame(c(NA,NA))
    data77$c1 = c(FALSE, TRUE)
    data77$c2 = c(TRUE, FALSE)
    data77$c3 = c(FALSE, FALSE)
    data77$`c(NA, NA)`=NULL
     
    data88 = NA
     
    for (i in 1:nrow(data77)) {
      if (data77[i,1] == TRUE) {
        data88[i] = 1    } 
      if (data77[i,2] == TRUE) {
          data88[i]=2    } 
      if (data77[i,3] == TRUE) {
          data88[i]=3    } 
        }

  3. #3
    Membre éclairé
    Inscrit en
    Janvier 2003
    Messages
    604
    Détails du profil
    Informations forums :
    Inscription : Janvier 2003
    Messages : 604
    Par défaut
    Bonjour, c'est effectivement envisageable, mais le R permet normalement d'obtenir des résultats en se passant des boucles gourmandes en temps de calcul.
    Je dis cela mais j'ai pas trouvé mieux pour le moment.

  4. #4
    Membre averti
    Femme Profil pro
    Étudiant
    Inscrit en
    Mars 2019
    Messages
    27
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 31
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2019
    Messages : 27
    Par défaut
    C'est la première chose qui met venu a l'esprit
    Après il est possible de passer le 2eme if en ifelse et le 3eme if en else pour gagner un peu de temps
    Bon courage

  5. #5
    Expert confirmé
    Avatar de anapurna
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2002
    Messages
    3 494
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 494
    Par défaut
    salut

    tu veut transposer ta matrice
    si c'est le cas tu a la APERM

  6. #6
    Membre éprouvé
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Juillet 2009
    Messages
    122
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Enseignant Chercheur

    Informations forums :
    Inscription : Juillet 2009
    Messages : 122
    Par défaut
    Salut,

    si il n'y a qu'un seul TRUE par ligne de ton data frame, alors la fonction which fait exactement ce que tu cherches.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    df <- data.frame(c(F,T,F,F), c(T,F,T,F), c(F,F,F,T))
    apply(df, 1, which)
    Résultat :

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

Discussions similaires

  1. [AC-2000] Ajouter une colonne de données à une table via vrai faux
    Par AmaAna dans le forum Modélisation
    Réponses: 1
    Dernier message: 17/05/2011, 16h46
  2. [2005] Transformation de colonne dérivée
    Par pticouta dans le forum SSIS
    Réponses: 7
    Dernier message: 27/04/2011, 11h10
  3. Réponses: 6
    Dernier message: 11/10/2009, 10h57
  4. Transformer des colonnes en lignes
    Par marman dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 23/11/2006, 17h43
  5. transformer des colonnes en lignes
    Par flonardi dans le forum Oracle
    Réponses: 13
    Dernier message: 28/10/2004, 12h43

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