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 :

Condition avec ifelse comprenant le "ou"


Sujet :

R

  1. #1
    Futur Membre du Club
    Femme Profil pro
    Médecin
    Inscrit en
    Août 2018
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Médecin
    Secteur : Santé

    Informations forums :
    Inscription : Août 2018
    Messages : 4
    Par défaut Condition avec ifelse comprenant le "ou"
    Bonjour à tous,

    Je découvre R et je suis en difficultés pour créer une variable "dépression au cours d'au moins un des trois temps".
    Je m'explique :

    J'ai constitué un sous-groupe data2 de mon dataframe.
    J'ai les variables data2$EPDSseuil12_4 --> dépression au 4ème mois, data2$EPDSseuil12_8-->dépression au 8ème mois, et data2$EPDSseuil12_PP ->dépression après l'accouchement.

    Je souhaite créer la variable dépression si au moins un des 3 temps est positif.

    J'ai tenté :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    if(data2$EPDSseuil12_4=1 | data2$EPDSseuil12_8=1 |data2$EPDSseuil12_PP=1){data2$depression = 1}
     
    data2$depression <- ifelse((data2$EPDSseuil12_4 == "oui" | data2$EPDSseuil12_8 =="oui"| data2$EPDSseuil12_PP =="oui"),1,0)  
     
    data2$depression <- ifelse((data2$EPDSseuil12_4 ==1 | data2$EPDSseuil12_8 ==1| data2$EPDSseuil12_PP ==1),1,0)
    Mais aucun ne marche.

    Auriez-vous des idées?

    Je vous remercie par avance.

  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 : 37
    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
    Par défaut
    Bonjour,

    A priori l'utilisation du "ifelse" me semble pertinente.

    Le problème vient peut-être du contenu et/ou format de vos variables : les valeurs sont-elles 1 ou "oui" ? Quels sont les types des variables considérées (numeric, factor, ...) ?

    Et enfin, quand vous dîtes que "ça ne marche" pas, c'est-à-dire ? Avez-vous un message d'erreur quelconque ? Que contient votre variable "data2$depression" après exécution ?


    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 émérite
    Homme Profil pro
    Chercheur
    Inscrit en
    Décembre 2015
    Messages
    327
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2015
    Messages : 327
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if(data2$EPDSseuil12_4=1 | data2$EPDSseuil12_8=1 |data2$EPDSseuil12_PP=1){data2$depression = 1}
    C'est normal que cela ne marche pas, le code est faux :
    1) data2$EPDSseuil12_4=1 est une affectation de valeur et non un test logique,
    2) l'argument d'un if est une valeur non un vecteur contrairement à ifelse
    3) if est préférable d'utiliser ||
    => le if doit être dans une boucle d'où la justification du ifelse.

    Pour les autres codes, d'abord répondre aux questions de A.D.

  4. #4
    Futur Membre du Club
    Femme Profil pro
    Médecin
    Inscrit en
    Août 2018
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Médecin
    Secteur : Santé

    Informations forums :
    Inscription : Août 2018
    Messages : 4
    Par défaut
    Bonjour,

    Merci de vos réponses. Je débute sur R alors je ne comprends pas tous les termes.

    1)
    Mes variables sont des facteurs

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    str(data2$EPDSseuil12_4)
    Factor w/ 2 levels "Non","Oui": 1 1 1 1 1 1 1 1 1 1 ...
    Mais je voulais remplacer les "non" en "0" et "oui" en "1" mais la formule ne semble pas marcher :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    data2$EPDSseuil12_4 <- ifelse(data2$EPDSseuil12_4_cor == "non",0,1)
    Error in `$<-.data.frame`(`*tmp*`, EPDSseuil12_4, value = logical(0)) : 
      replacement has 0 rows, data has 253

    --> Je veux bien de l'aide sur cette première partie


    2) Pour la formule cela m'affiche cela (considérant non et oui vu que je n'ai pas réussi à convertir en 0 et 1)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    data2$depression <- ifelse((data2$EPDSseuil12_4 == "oui" | data2$EPDSseuil12_8 =="oui"| data2$EPDSseuil12_PP =="oui"),1,0)
     
    > table(data2$depression)
     
      0 
    153
    Merci de votre aide

  5. #5
    Futur Membre du Club
    Femme Profil pro
    Médecin
    Inscrit en
    Août 2018
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Médecin
    Secteur : Santé

    Informations forums :
    Inscription : Août 2018
    Messages : 4
    Par défaut
    Je me suis trompée dans la première partie de ma réponse précédent, j'ai marqué un "cor" en trop mais cela ne marche pas quand même quand je l'enlève.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    data2$EPDSseuil12_4 <- ifelse(data2$EPDSseuil12_4 == "Non",0,1)
    > table(data2$EPDSseuil12_4)
     
      1 
    253

  6. #6
    Membre émérite
    Homme Profil pro
    Chercheur
    Inscrit en
    Décembre 2015
    Messages
    327
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2015
    Messages : 327
    Par défaut
    1) R est sensible à la casse donc "non" et "Non" sont différents.
    2) Que donne donne table( data2$EPDSseuil12_4) avant la tentative de transformation ? Cette variable est un facteur à deux niveaux mais un seul niveau est peut-être peuplé. str n'est pas suffisant pour le déterminer car si la fonction décrit la variable, elle ne donne que les premières valeurs du vecteur. De plus, une solution est d'utiliser le codage interne du facteur puisqu'en absence de réordonnancement, "Non" est le premier niveau et "Oui", le second. Donc, la solution devient :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    data2$EPDSseuil12_4 <- as.numeric( data2$EPDSseuil12_4) - 1

Discussions similaires

  1. Réponses: 2
    Dernier message: 30/08/2004, 14h48

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