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 une ligne selon sa fréquence


Sujet :

R

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Étudiant
    Inscrit en
    Mai 2010
    Messages
    40
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2010
    Messages : 40
    Par défaut Répéter une ligne selon sa fréquence
    Salut à tous!
    J'ai un tableau avec 3 colonnes dont une qui indique la fréquence.
    Comment faire pour pouvoir répéter ma ligne suivant cette fréquence? Autrement dit, si la fréquence est égale à 2 dans ma première ligne, je veux que cette ligne apparaisse 2 fois dans mon tableau

    Voici un exemple :
    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,4)
    age=c(25,21,34,19)
    frequence=c(2,3,1,2)
    tab=cbind(id,age,frequence)
     
         id age frequence
    [1,]  1  25         2
    [2,]  2  21         3
    [3,]  3  34         1
    [4,]  4  19         2
    Je veux obtenir le tableau suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
         id age
    [1,]  1  25
    [2,]  1  25
    [3,]  2  21
    [4,]  2  21
    [5,]  2  21
    [6,]  3  34
    [7,]  4  19
    [8,]  4  19
    Auriez-vous des idées de code?

    Par avance merci!

  2. #2
    Membre Expert
    Avatar de pitipoisson
    Homme Profil pro
    Chercheur
    Inscrit en
    Septembre 2006
    Messages
    1 942
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Chercheur
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Septembre 2006
    Messages : 1 942
    Par défaut
    Bonjour,

    Le plus direct et efficace (enfin, je pense), c'est d'utiliser la fonction rep sur les indices de lignes avec la colonne frequence comme paramètre de répétition :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    df <- data.frame(id=1:5, freq=sample(1:3, size=5, replace=TRUE))
     
    df
     
    df[rep(seq(length.out=nrow(df)),
           times=df$freq), ]

  3. #3
    Membre averti
    Profil pro
    Étudiant
    Inscrit en
    Mai 2010
    Messages
    40
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2010
    Messages : 40
    Par défaut
    Un grand merci pitipoisson pour la réponse rapide!

    Mais je travaille sur un tableau de 11000 lignes donc je ne sais pas forcément quelle est la plus grande fréquence (je peux toujours les trier par ordre de fréquence)
    Et dans mon deuxième tableau, l'age n'apparait plus...

  4. #4
    Modératrice

    Femme Profil pro
    Statisticienne, Fondatrice de la société DACTA
    Inscrit en
    Juin 2010
    Messages
    893
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 37
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Statisticienne, Fondatrice de la société DACTA

    Informations forums :
    Inscription : Juin 2010
    Messages : 893
    Par défaut
    Bonjour,

    Je me permets de mettre mon petit grain de sel dans la conversation car j'étais en train de vous rédiger une réponse quand je me suis faite devancer par pitipoisson (mais sa réponse est bien meilleure que celle que j'allais poster ).

    Citation Envoyé par NemoParis Voir le message
    Mais je travaille sur un tableau de 11000 lignes donc je ne sais pas forcément quelle est la plus grande fréquence (je peux toujours les trier par ordre de fréquence)
    Et dans mon deuxième tableau, l'age n'apparait plus...
    Premièrement, je ne vois pas pourquoi vous pensez avoir besoin de la plus grande fréquence?
    Deuxièmement, le code donné par pitipoisson est une indication quant à la méthode à utiliser. Il vous faudra l'adapter pour que cela colle à votre problème (notamment pour faire apparaître l'âge). Cela vous permettra de vous l'approprier et de mieux comprendre son fonctionnement.

    Bonne continuation


    Cordialement,

    A.D.

    Forum R
    Fournir le code utilisé (pensez aux balises code !), les packages nécessaires, ainsi qu'un court mais représentatif extrait du jeu de données et les éventuels messages d'erreur.
    Recherche d'informations concernant R : RSiteSearch / tutoriels : http://r.developpez.com/cours/ .

    Pensez également au bouton "Résolu" et à voter (en bas à droite des messages) lorsque vous avez obtenu une réponse satisfaisante.

  5. #5
    Membre Expert
    Avatar de pitipoisson
    Homme Profil pro
    Chercheur
    Inscrit en
    Septembre 2006
    Messages
    1 942
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Chercheur
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Septembre 2006
    Messages : 1 942
    Par défaut
    Citation Envoyé par NemoParis Voir le message
    Et dans mon deuxième tableau, l'age n'apparait plus...
    Il n'y a pas de raison.

    Il faut évidemment adapter mon exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    tab[rep(seq(length.out=nrow(tab)),
            times=tab$frequence), 
        1:2]    # pour sélectionner des colonnes
    Edit: grillé

  6. #6
    Membre averti
    Profil pro
    Étudiant
    Inscrit en
    Mai 2010
    Messages
    40
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2010
    Messages : 40
    Par défaut
    C'est bon, j'ai trouvé, merci beaucoup pour la rapidité des réponses

  7. #7
    Membre averti
    Profil pro
    Étudiant
    Inscrit en
    Mai 2010
    Messages
    40
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2010
    Messages : 40
    Par défaut
    Merci pitipoisson et désolé de vous avoir ...

    Votre code est beaucoup plus simple que ce que j'avais trouvé,

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

Discussions similaires

  1. Découper une ligne selon un separateur sans le 1er champ
    Par pascalbout1 dans le forum Langage
    Réponses: 2
    Dernier message: 31/10/2007, 11h18
  2. Réponses: 1
    Dernier message: 10/08/2007, 15h01
  3. Répéter une ligne N fois
    Par rs dans le forum SQL
    Réponses: 5
    Dernier message: 09/08/2007, 15h40
  4. Problème de débutant : Répéter une ligne
    Par Grelot dans le forum Access
    Réponses: 5
    Dernier message: 05/06/2007, 13h55
  5. Ne pas afficher une ligne selon une valeur
    Par uloaccess dans le forum Access
    Réponses: 3
    Dernier message: 18/11/2005, 14h04

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