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 :

ajout d'une valeur à une colonne sous condition


Sujet :

R

  1. #1
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2018
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2018
    Messages : 20
    Par défaut ajout d'une valeur à une colonne sous condition
    Bonjour,

    Je suis sous R et je voudrais écrire un code qui me permettrai d'ajouter une somme x en fonction de l'année.

    En gros ma table se présente comme suit :

    ID year freq
    123 2011 3
    342 2012 9
    235 2013 11
    654 2014 2
    393 2015 8

    Voici un début de code que j'ai essayé d'écrire sans succès :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    for (ventes_final$year in 2011:2015) {
    if(ventes_final$year == 2012) {return(ventes_final$frequence_achat_week == ventes_final$frequence_achat_week + 53)}
     else{if(ventes_final$year == 2013) {return(ventes_final$frequence_achat_week == ventes_final$frequence_achat_week + 105)}
     if(ventes_final$year == 2014) {return(ventes_final$frequence_achat_week == ventes_final$frequence_achat_week + 157)}
     if(ventes_final$year == 2015) {return(ventes_final$frequence_achat_week == ventes_final$frequence_achat_week + 209)}
     else{return(ventes_final$year)}
     }
    }
    J'ai également essayé un autre code qui est le suivant, toujours sans succès :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    if (ventes_final$year == 2012) {
      ventes_final$frequence_achat_week <- ventes_final$frequence_achat_week + 53
    }
    else if (ventes_final$year == 2013) {
      ventes_final$frequence_achat_week <- ventes_final$frequence_achat_week + 105
    }
    else if (ventes_final$year == 2014) {
      ventes_final$frequence_achat_week <- ventes_final$frequence_achat_week + 157
    }
    else {ventes_final$frequence_achat_week <- ventes_final$frequence_achat_week
    }

    je dois sûrement faire une faute quelque part mais je ne vois pas où.

    Merci en avance.

    Bien cordialement,

    Ali3529

  2. #2
    Membre Expert
    Inscrit en
    Novembre 2009
    Messages
    707
    Détails du profil
    Informations forums :
    Inscription : Novembre 2009
    Messages : 707
    Par défaut Modification d'une valeur sous condition
    Bonjour,

    Il ne faut pas raisonner en boucles dans R.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    > df <- read.table("test.txt",header=TRUE)
    > df
       ID year freq
    1 123 2011    3
    2 342 2012    9
    3 235 2013   11
    4 654 2014    2
    5 393 2015    8
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    > df$freq[df$year==2012] <- df$freq[df$year==2012]+53
    > df$freq[df$year==2013] <- df$freq[df$year==2013]+105
    > df$freq[df$year==2014] <- df$freq[df$year==2014]+157
    > df$freq[df$year==2015] <- df$freq[df$year==2015]+209
    > df
       ID year freq
    1 123 2011    3
    2 342 2012   62
    3 235 2013  116
    4 654 2014  159
    5 393 2015  217

    ou avec la fonction ifelse() :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    > df$freq <- ifelse(df$year==2012, df$freq+53, df$freq)
    > df$freq <- ifelse(df$year==2013, df$freq+105, df$freq)
    > df$freq <- ifelse(df$year==2014, df$freq+157, df$freq)
    > df$freq <- ifelse(df$year==2015, df$freq+209, df$freq)
    > df
       ID year freq
    1 123 2011    3
    2 342 2012   62
    3 235 2013  116
    4 654 2014  159
    5 393 2015  217
    Cordialement,

  3. #3
    Membre chevronné
    Inscrit en
    Février 2011
    Messages
    276
    Détails du profil
    Informations forums :
    Inscription : Février 2011
    Messages : 276
    Par défaut
    Bonjour

    Tu peux aussi passer par un objet intermédiaire et par la fonction match :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    values <- data.frame(year= 2011:2015, Valeur = c(0, 53, 105, 157, 209))
    ventes_final$frequence_achat_week <- ventes_final$frequence_achat_week + values$Valeur[match(ventes_final$year, values$year, nomatch = NA)]
    cdlt

  4. #4
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2018
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2018
    Messages : 20
    Par défaut
    Les 2 méthodes marchent très bien, merci encore pour votre aide.

    Bien cordialement,

    Ali3529

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

Discussions similaires

  1. [XL-2010] Copier valeur d'une colonne sous condition dans une boucle
    Par gauthier69 dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 04/04/2014, 11h26
  2. Réponses: 10
    Dernier message: 07/07/2012, 17h11
  3. [XL-2003] Bloquer une colonne sous condition
    Par louzz dans le forum Excel
    Réponses: 11
    Dernier message: 07/09/2011, 16h22
  4. selection de cellules d'une colonne sous condition
    Par Mounamidou dans le forum Macros et VBA Excel
    Réponses: 9
    Dernier message: 02/10/2007, 14h09

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