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 :

Création d'une variable à partir de variables existantes et avec des conditions


Sujet :

R

  1. #1
    Nouveau Candidat au Club
    Femme Profil pro
    Urbaniste
    Inscrit en
    Décembre 2020
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Urbaniste

    Informations forums :
    Inscription : Décembre 2020
    Messages : 2
    Points : 1
    Points
    1
    Par défaut Création d'une variable à partir de variables existantes et avec des conditions
    Bonjour, je cherche à créer une variable à partir de variables existantes en y posant des conditions. FYI, je suis en plein apprentissage de R. Je passe de SAS à R. J'aurais besoin d'aide sur les fonctions IF, ELSE IF, ELSE, THEN s'il vous plaît et particulièrement sur la syntaxe qui m'échappe totalement. J'aimerais aussi voir comment ajouter deux conditions à une modalité de la variable Frequence.

    Je souhaite créer la variable Frequence, variable qualitiative à partir de NB_A, variable quantitative.

    Exemple SAS:
    Code SAS : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    data BASE_2;
    set BASE_1;
    if NB_A<100 then Frequence="1.Faible";
    else if NB_A>100 and NB_A<200 then Frequence="2.Moyen";
    else Frequence="3.Fort";
    run;

    Exemple R (échec):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Base_2$Frequence=ifelse(Base_2$NB_Attribution<=100,"1.Faible",ifelse(Base_2$NB_Attribution>100 & Base_2$NB_Attribution<=200,"2.Moyen"ifelse(Base_2$NB_Attribution>=200,"3.Fort")))
    Pourriez-vous m'aider?
    En vous remerciant,

  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 Maeva.
    Tu n'es pas très loin du bon résultat avec ton code R actuel. Seulement attention, ifelse a 3 arguments (comme SI dans Excel) : la condition, le résultat quand elle est vraie et le résultat quand elle est fausse. Du coup pas besoin du 3e ifelse.
    Pas besoin non plus de nier la 1e condition dans le second ifelse.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Base_2$Frequence <- ifelse(Base_2$NB_Attribution<=100, 
                                              "1.Faible",
                                              ifelse(Base_2$NB_Attribution<=200,
                                                           "2.Moyen",
                                                           "3.Fort"))
    Et pour info, quand on a besoin de découper en tranches une variable quantitative, il y a la fonction cut ; on ne choisit pas vraiment les libellés des valeurs créées mais on peut toujours les modifier a posteriori.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Base_2$Frequence <- cut(Base_2$NB_Attribution, c(-Inf, 100, 200, Inf))
    levels(Base_2$Frequence) <- c("1. Faible", "2. Moyen", "3. Fort")
    L'avantage de cut est que tu ne crées pas un vecteur texte mais un facteur ordonné, dans lequel il n'est pas forcément nécessaire d'ajouter des chiffres en début de valeur pour qu'elles s'affichent dans le bon ordre. Dans l'exemple ci-dessus tu pourrais avoir juste "Faible", "Moyen", "Fort" comme valeurs mais un affichage dans cet ordre et pas dans l'ordre alphabétique. Alors qu'avec ton ifelse tu crées un vecteur texte, qui s'affichera toujours dans l'ordre alphabétique des valeurs : dans ce cas les 1, 2, 3 sont indispensables.
    Bon courage.
    Olivier

  3. #3
    Nouveau Candidat au Club
    Femme Profil pro
    Urbaniste
    Inscrit en
    Décembre 2020
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Urbaniste

    Informations forums :
    Inscription : Décembre 2020
    Messages : 2
    Points : 1
    Points
    1
    Par défaut
    Bonjour Olivier,
    Merci infiniment pour ton aide, c'est très précieux!! Je vois, la logique est semblable à celle d'Excel ok.

    Petite interrogation, dans le deuxième exemple dans lequel tu découpes en tranches la variable quantitative Frequence, je n'ai pas compris pourquoi on mettait dans la parenthèse ce signe"-" avant le premier Inf et pourquoi on terminait sur un "Inf" et non sur quelque chose comme "Sup"?

    Merci beaucoup,
    Maeva

  4. #4
    Membre expérimenté
    Inscrit en
    Novembre 2009
    Messages
    703
    Détails du profil
    Informations forums :
    Inscription : Novembre 2009
    Messages : 703
    Points : 1 311
    Points
    1 311
    Par défaut Inf
    Bonjour,

    Inf comme infini.

    Cordialement,

Discussions similaires

  1. Réponses: 2
    Dernier message: 26/10/2016, 11h32
  2. Création d'une variable à partir de plusieurs variables
    Par Kiswends dans le forum SAS Base
    Réponses: 1
    Dernier message: 21/11/2013, 15h37
  3. Création d'une variable à partir de deux existantes
    Par cococmoi dans le forum SAS Base
    Réponses: 0
    Dernier message: 18/09/2013, 11h25
  4. Réponses: 1
    Dernier message: 07/04/2011, 20h28
  5. Création d'une variable de session avec un ID
    Par PrinceMaster77 dans le forum ASP
    Réponses: 4
    Dernier message: 18/10/2004, 10h28

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