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 :

Dupliquer ligne selon un variable


Sujet :

R

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Webmarketer
    Inscrit en
    Mai 2016
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Webmarketer

    Informations forums :
    Inscription : Mai 2016
    Messages : 8
    Points : 7
    Points
    7
    Par défaut Dupliquer ligne selon un variable
    Bonjour,

    Je souhaiterais dupliquer les lignes de mon data.frame selon une variable quantitative. Je pourrais faire une boucle sur chacune des lignes mais j'ai un trop gros fichier pour que cela soit envisageable.

    Mes données :

    ID Poids
    1 2
    2 4
    3 1

    Le résultat attendu :

    ID Poids
    1 2
    1 2
    2 4
    2 4
    2 4
    2 4
    3 1

    Merci par avance,
    Damien

  2. #2
    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 Dupliquer ligne selon une variable
    Bonjour,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    > ID<-c(1,2,3)
    > Poids<-c(2,4,1)
    > df<-data.frame(ID,Poids)
    > df
      ID Poids
    1  1     2
    2  2     4
    3  3     1
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    > df[rep(row.names(df), df$Poids),]
        ID Poids
    1    1     2
    1.1  1     2
    2    2     4
    2.1  2     4
    2.2  2     4
    2.3  2     4
    3    3     1
    Pour les grands data.frame, il est conseillé de remplacer row.names(df) par seq.int(1,nrow(df)) ou seq_len(nrow(df)).

    Il est aussi possible d'utiliser la fonction expandRows() du package splitstackshape.

    Cordialement,

  3. #3
    Nouveau membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Mars 2019
    Messages
    27
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 29
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2019
    Messages : 27
    Points : 27
    Points
    27
    Par défaut
    Bonjour,
    Est il possible de repartir une donnée d'une des variable entre toutes les répétitions ?
    Par exemple ici si on a
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    ID  = c(1,2,3)
    Poids = c(2,4,1)
    x = c(1,4,1)
    df = data.frame (ID, Poids, x)
    df
      ID Poids x
    1  1     2 1
    2  2     4 4
    3  3     1 1
    il faudrait
    ID Poids x
    1 2 1
    1 2 0
    2 4 1
    2 4 1
    2 4 1
    2 4 1
    3 1 1

  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 Dupliquer ligne selon une variable
    Bonjour,

    Il est possible de dupliquer les observations et numéroter les répétitions par groupe puis de réaliser un test sur le numéro de la répétition :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    > ID <- c(1,2,3)
    > Poids <- c(2,4,1)
    > x <- c(1,4,1)
    > df <- data.frame (ID, Poids, x)
    > df
      ID Poids x
    1  1     2 1
    2  2     4 4
    3  3     1 1
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    > df <- df[rep(row.names(df), df$Poids),]
    > df$RepNo <- sequence(rle(as.vector(df$ID))$lengths)
    > df
        ID Poids x RepNo
    1    1     2 1     1
    1.1  1     2 1     2
    2    2     4 4     1
    2.1  2     4 4     2
    2.2  2     4 4     3
    2.3  2     4 4     4
    3    3     1 1     1
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    > df$x <- ifelse(df$RepNo <= df$x, 1, NA)
    > df
        ID Poids  x RepNo
    1    1     2  1     1
    1.1  1     2 NA     2
    2    2     4  1     1
    2.1  2     4  1     2
    2.2  2     4  1     3
    2.3  2     4  1     4
    3    3     1  1     1
    Cordialement,

  5. #5
    Nouveau membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Mars 2019
    Messages
    27
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 29
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2019
    Messages : 27
    Points : 27
    Points
    27
    Par défaut
    Bonjour
    je vous remercie de votre réponse
    Ca marche nickel

    ps: merci aussi pour le message privé j'avais effectivement pas vu votre réponse

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

Discussions similaires

  1. [XL-2007] copier/ coller ligne selon condition à l'aide variable
    Par yann 49 dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 07/11/2014, 15h32
  2. Réponses: 2
    Dernier message: 08/07/2014, 10h24
  3. Suppression de lignes selon une variable
    Par jpe123 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 13/02/2013, 19h10
  4. dupliquer une ligne lorsqu'une variable =2
    Par betsoooo dans le forum SAS Base
    Réponses: 1
    Dernier message: 31/07/2009, 13h10
  5. Dupliquer la ligne selon N
    Par toto92 dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 26/08/2008, 14h30

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