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 :

Répéter valeur sur ligne d'un même individu


Sujet :

R

  1. #1
    Membre averti
    Femme Profil pro
    Étudiant
    Inscrit en
    Mars 2022
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 25
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Santé

    Informations forums :
    Inscription : Mars 2022
    Messages : 9
    Par défaut Répéter valeur sur ligne d'un même individu
    Bonjour,
    Je dispose d’un dataframe sur lequel il y a plusieurs lignes pour un même individu, j’ai un valeur qui apparait seulement sur le première ligne et j’aimerais la répéter sur toutes les lignes du même individu.

    ID Statut
    1 0
    1
    1
    2 1
    2

    Par exemple, je voudrais répéter le 0 de statut sur toutes les lignes du sujet 1 et le 1 de statut sur toutes les lignes du sujet 2.

    Je débute sur r et je n'ai aucune idée de comment faire, j'ai un data frame qui fait plus de 2000 lignes.

    Merci d'avance.

    j'ai essayé cela :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    library(dplyr)
    df %>% group_by(ID) %>% 
      mutate(Statut = Statut[1])
    mais ca ne marche pas, ca me met des 0 sur toutes les lignes de statut

  2. #2
    Membre éclairé
    Inscrit en
    Novembre 2003
    Messages
    554
    Détails du profil
    Informations forums :
    Inscription : Novembre 2003
    Messages : 554
    Par défaut
    Citation Envoyé par lg__213 Voir le message
    je voudrais répéter le 0 de statut sur toutes les lignes du sujet 1 et le 1 de statut sur toutes les lignes du sujet 2.
    Une première solution simple, avec une boucle :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    for (i in seq(nrow(DF))) {
        if (i == 1) next
        if (DF[i,1] == DF[i-1,1]) DF[i,2] <- DF[i-1,2]
    }
    Mais je suppose qu'il y a de meilleures solutions vectorielles

  3. #3
    Membre averti
    Femme Profil pro
    Étudiant
    Inscrit en
    Mars 2022
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 25
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Santé

    Informations forums :
    Inscription : Mars 2022
    Messages : 9
    Par défaut
    merci pour votre réponse mais ca n'a pas l'air de fonctionner

  4. #4
    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 : 48
    Localisation : France

    Informations professionnelles :
    Activité : Formateur R/SAS/statistiques
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 064
    Par défaut
    Bonjour.
    En restant dans {dplyr} :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    library(dplyr)
    df %>% group_by(ID) %>%
    mutate(Statut = first(Statut))
    Dans R base c'est un peu plus compliqué, il faudrait sans doute faire un split selon ID, et avec une boucle ou un apply dupliquer à toutes les lignes la première valeur de Statut.

  5. #5
    Membre averti
    Femme Profil pro
    Étudiant
    Inscrit en
    Mars 2022
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 25
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Santé

    Informations forums :
    Inscription : Mars 2022
    Messages : 9
    Par défaut
    Bonjour,
    Merci de votre aide. J'ai le même problème qu'avec la première fonction que j'ai essayé.

    Avec ce data frame :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    df <- data.frame(
      ID  = c(1,1,1,2,2), 
      Status = c(0, NA, NA, 1, NA))
    et ce code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    library(dplyr)
    df %>% group_by(ID) %>%
      mutate(Status = first(Status))
    J'obtiens cette sortie :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    # A tibble: 5 x 2
    # Groups:   ID [2]
         ID Status
      <dbl>  <dbl>
    1     1      0
    2     1      0
    3     1      0
    4     2      0
    5     2      0
    Je ne comprends pas d'où peut venir le problème

  6. #6
    Membre averti
    Femme Profil pro
    Étudiant
    Inscrit en
    Mars 2022
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 25
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Santé

    Informations forums :
    Inscription : Mars 2022
    Messages : 9
    Par défaut
    Je viens de fermer tous mes codes r et de tout relancer et ca fonctionne bien!! Merci beaucoup de votre aide

    Bonne fin de journée!

  7. #7
    Membre éclairé
    Inscrit en
    Novembre 2003
    Messages
    554
    Détails du profil
    Informations forums :
    Inscription : Novembre 2003
    Messages : 554
    Par défaut
    Citation Envoyé par lg__213 Voir le message
    merci pour votre réponse mais ca n'a pas l'air de fonctionner
    Eh bien ça fonctionne très bien chez moi. Je joints le code complet que j'ai utilisé en R base :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    df <- data.frame(ID = c(1,1,1,2,2),Status = c(0, NA, NA, 1, NA))
    for (i in seq(nrow(df))) {
        if (i == 1) next
        if (df[i,1] == df[i-1,1]) df[i,2] <- df[i-1,2]
    }
    print(df)
    J'obtiens bien ce qui semblait être la demande initiale :
    ID Status
    1 1 0
    2 1 0
    3 1 0
    4 2 1
    5 2 1

  8. #8
    Membre averti
    Femme Profil pro
    Étudiant
    Inscrit en
    Mars 2022
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 25
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Santé

    Informations forums :
    Inscription : Mars 2022
    Messages : 9
    Par défaut
    Citation Envoyé par enicnath Voir le message
    Eh bien ça fonctionne très bien chez moi. Je joints le code complet que j'ai utilisé en R base :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    df <- data.frame(ID = c(1,1,1,2,2),Status = c(0, NA, NA, 1, NA))
    for (i in seq(nrow(df))) {
        if (i == 1) next
        if (df[i,1] == df[i-1,1]) df[i,2] <- df[i-1,2]
    }
    print(df)
    J'obtiens bien ce qui semblait être la demande initiale :

    Oui ca marche bien également merci beaucoup! Je ne sais pas pourquoi tout à l'heure rien ne marchait et en fermant et en relançant tout fonctionne! Un petit caprice de R ahah

    Merci de votre aide

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 13/05/2016, 22h26
  2. [XL-2013] Rechercher plusieurs valeurs sur la même ligne pour copie
    Par McRbt dans le forum Macros et VBA Excel
    Réponses: 61
    Dernier message: 16/06/2014, 16h07
  3. [2012] Comment retrouver une valeur sur plusieurs Vues en même temps ?
    Par wyzer dans le forum MS SQL Server
    Réponses: 5
    Dernier message: 20/02/2014, 19h59
  4. Association de valeur sur une même ligne
    Par elminio75 dans le forum Excel
    Réponses: 2
    Dernier message: 07/10/2013, 13h47
  5. Réponses: 3
    Dernier message: 27/08/2010, 13h01

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