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 :

Recopier valeur cellule précédente dans un data frame


Sujet :

R

  1. #1
    Membre du Club
    Femme Profil pro
    Assistant aux utilisateurs
    Inscrit en
    Janvier 2019
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 38
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Assistant aux utilisateurs

    Informations forums :
    Inscription : Janvier 2019
    Messages : 6
    Par défaut Recopier valeur cellule précédente dans un data frame
    Bonjour,
    malgré mes recherches habituellement fructueuses, je n'ai pas réussi à me démêler ... Je cherche à recopier tout simplement la valeur précédente dans un data frame, en fonction d'une condition.
    Sur Excel 10 sec sur R je n'arrive à rien ... ca doit pourtant bien être possible :/
    Je vais illustrer avec mon exemple excel : nos données en colonne A et B ; 1 contient le critère ; B une initialisation des données

    excel : en B2 : =si(A2="critere";B1;A2). puis tirer la formule sur toute la colonne B

    Comment faire l'equivalent en R ?
    Mes excuses si la réponse existait et que je ne l'ai pas trouvée

    J'ai testé avec les fonctions LAG/LEAD qui ne fonctionnait que partiellement pour mon besoin. De même via des boucles, j'obtenais un résultat mais pas celui souhaité. LAST ne semble pas aider non plus ...

  2. #2
    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 faire comme suit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    # un exemple :
    tab <- structure(list(A = c("a", "b", "a", "a", "a", "b", "a", "a", 
    "b", "a"), B = c("A", "B", "C", "D", "E", "F", "G", "H", "I", 
    "J")), class = "data.frame", row.names = c(NA, -10L))
     
    c(tab$B[1], ifelse(tab$A[-1]=="a", tab$B[-nrow(tab)], tab$A[-1]))
    La partie du code qui t'intéresse est celle dans ifelse.
    tab$A[-1] c'est pour dire toute les lignes sauf la première donc de A2 à An, tab$B[-nrow(tab)] c'est pour dire de B1 à Bn-1. Si la condition est remplie alors tu mets Bn-1 sinon tu mets An.

    cdlt

  3. #3
    Membre du Club
    Femme Profil pro
    Assistant aux utilisateurs
    Inscrit en
    Janvier 2019
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 38
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Assistant aux utilisateurs

    Informations forums :
    Inscription : Janvier 2019
    Messages : 6
    Par défaut
    Bonsoir,

    Merci pour le retour, mais ca ne fait pas ce que je cherche a faire
    Ton exemple produit un équivalent du lag d'après l'exécution que j'ai testé.
    Je cherche à faire littéralement ca : on doit pas être loin mais je sèche :/
    Nom : Capture d’écran 2019-01-25 à 18.36.33.jpg
Affichages : 832
Taille : 21,8 Ko

  4. #4
    Membre chevronné
    Inscrit en
    Février 2011
    Messages
    276
    Détails du profil
    Informations forums :
    Inscription : Février 2011
    Messages : 276
    Par défaut
    Pourtant c'est bien ce que le code fait.
    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
    tab <- data.frame(A = rep(c(0, 9, 1, 9), c(1, 3, 2, 2)), B = 1:8)
    tab
      A B
    1 0 1
    2 9 2
    3 9 3
    4 9 4
    5 1 5
    6 1 6
    7 9 7
    8 9 8
    tab$B <- c(0, ifelse(tab$A[-1] == 9, tab$B[-nrow(tab)], tab$A[-1]))
    tab
      A B
    1 0 0
    2 9 1
    3 9 2
    4 9 3
    5 1 1  
    6 1 1
    7 9 6
    8 9 7
    On voit bien que pour A2 on a B2 qui vaut 1 et qui correspond à la valeur de B1 avant modif. Idem pour A8, on a B8 qui est égale à la valeur de B7 avant modif.
    Après je ne vois pas ce qui ne va pas avec ce code.
    cdlt

  5. #5
    Membre chevronné
    Inscrit en
    Février 2011
    Messages
    276
    Détails du profil
    Informations forums :
    Inscription : Février 2011
    Messages : 276
    Par défaut
    Après c'est peut-être le côté dynamique de excel que tu cherches, mais si c'est le cas tu vas devoir passer par une boucle for ou while :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    B <- rep(NA, nrow(tab))
    while (!identical(B, tab$B)){
    B <- tab$B
    tab$B <- c(0, ifelse(tab$A[-1] == 9, tab$B[-nrow(tab)], tab$A[-1]))
    }
     
    # ou 
    B <- rep(0, 8)
    for (i in 2:nrow(tab)) {
      B[i] <- if (tab$A[i]==9) B[i-1] else tab$A[i]
    }
    tab$B <- B
    cdlt

  6. #6
    Membre du Club
    Femme Profil pro
    Assistant aux utilisateurs
    Inscrit en
    Janvier 2019
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 38
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Assistant aux utilisateurs

    Informations forums :
    Inscription : Janvier 2019
    Messages : 6
    Par défaut
    Ahhh oui effectivement j'essayais de faire tourner avec une boucle sans y parvenir ^^ (tout en sachant bien que ca devait être assez simple ...)
    Super merci bcp pour ton aide

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

Discussions similaires

  1. [vb.net]recuperer valeur cellule contenue dans datagrid
    Par nasty dans le forum Windows Forms
    Réponses: 3
    Dernier message: 12/02/2014, 11h29
  2. Réponses: 5
    Dernier message: 04/04/2011, 20h39
  3. Suppression de colonnes dans un data.frame
    Par ricoben dans le forum R
    Réponses: 1
    Dernier message: 13/04/2010, 17h13
  4. Mean par colonne dans une data frame
    Par manoir dans le forum R
    Réponses: 3
    Dernier message: 19/06/2009, 11h06
  5. Réponses: 2
    Dernier message: 14/11/2008, 14h53

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