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 :

fusionner des lignes


Sujet :

R

  1. #1
    Membre à l'essai
    Femme Profil pro
    Étudiant
    Inscrit en
    Avril 2012
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2012
    Messages : 23
    Points : 13
    Points
    13
    Par défaut fusionner des lignes
    Bonjour,

    Je suis désolée de vous harceler tout les jours mais j'ai (encore) un problème.

    J'ai
    >tab
    A B
    1 0.60
    1 0.89
    1 0.65
    1 0.12
    2 0.53
    2 0.94
    3 0.15
    3 0.56
    3 0.77
    3 0.38
    3 0.89
    >
    Et je voudrais :

    >tab
    1 2 3
    1 0.60 0.53 0.15
    2 0.89 0.94 0.56
    3 0.65 NA 0.77
    4 0.12 NA 0.38
    5 NA NA 0.89
    L'idée de départ était de combiner les lignes qui ont le même nom puis de "retourner" le tableau.

    J'ai fait ça :
    comput = c()

    for (niveau in 1:3){

    axt = which(tab$A== niveau)

    comput = rbind(comput, c(niveau,tab$A[axt]))
    }
    Pour avoir un truc du genre :
    1 0.60, 0.89, 0.65, 0.12
    2 0.53, 0.94
    .

    Je pense que ma boucle n'est pas bonne, mais je ne sais pas pourquoi.
    Merciiii

    PS: mon tableau fait 20000 lignes en tout, alors je voudrais éviter de c("...", "...",

  2. #2
    Membre averti
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2012
    Messages
    291
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2012
    Messages : 291
    Points : 434
    Points
    434
    Par défaut
    Bonjour,

    En reprenant votre algorithme :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    comput=matrix(NA,nrow=5,ncol=3);
    for (niveau in 1:3){
       comput[ 1:sum(tab$A==niveau) , niveau ] = tab$B[ tab$A==niveau ];
    }

  3. #3
    Membre à l'essai
    Femme Profil pro
    Étudiant
    Inscrit en
    Avril 2012
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2012
    Messages : 23
    Points : 13
    Points
    13
    Par défaut
    Argh, ça marche pas parce que j'ai des NaN dedans.
    Il faudrait que je les remplace par des NA.


    for (i in 1:dim(tab)[1]){
    for (j in 1:dim(tab)[2]){
    if (tab[i,j]==NaN & is.na(tab[i,j])==FALSE) {tab[i,j]<-NA}
    }
    }
    Ne fonctionne pas donc je peux pas vous dire encore si ça marche.

  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 : 35
    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
    Points : 2 673
    Points
    2 673
    Par défaut
    Bonjour,

    Citation Envoyé par Jesk34 Voir le message
    Argh, ça marche pas parce que j'ai des NaN dedans.
    Quel problème rencontrez-vous avec vos NaN en appliquant le code donné par Gakusei?

    Personnellement j'ai testé son code avec votre exemple de jeu de données et en remplaçant certaines valeurs dans B par des NaN et cela fonctionne.
    A moins que cela soit dans le tableau "final" où vous ne souhaitez pas voir apparaitre de NaN?

    Sinon pour info, si par exemple tab[9,2] vaut NaN, alors on aura :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    is.na(tab[9,2])
    [1] TRUE
    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 à l'essai
    Femme Profil pro
    Étudiant
    Inscrit en
    Avril 2012
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2012
    Messages : 23
    Points : 13
    Points
    13
    Par défaut
    comput=matrix(NA,nrow=1203,ncol=254);
    for (niveau in 54:269){
    comput[ 1:sum(tab$A==niveau) , niveau ] = newdata$B[ newdata$A==niveau ];
    }

    Erreur dans 1:sum(tab$Depth == niveau) : argument NA / NaN
    ça me dis ça en fait.

  6. #6
    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 : 35
    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
    Points : 2 673
    Points
    2 673
    Par défaut
    Si vous pouviez donner un court extrait de votre jeu de données (ou un jeu de données fictif) sur lequel le problème est rencontré, cela pourrait nous faciliter la tâche pour vous aider.

    De plus, rien qu'en regardant votre code j'ai l'impression que certaines choses ne vont pas... Pourquoi le nombre de colonnes de "comput" est-il 254 alors que vos niveaux vont de 54 à 269, ce qui ne nous fait en tout que 216 niveaux. Or "comput" devrait avoir autant de colonnes qu'il y a de "niveaux" dans la colonne A.

    Sinon, si je reprends votre exemple, il semblerait que le problème se situe au niveau de la colonne A en fait.
    Avez-vous des valeurs NA ou NaN dans cette colonne (celle contenant les indices/niveaux)? Si oui, alors c'est pour ça que le code donné par Gakusei coince car vous aurez des NA dans tab$A==niveau .
    Dans ce cas, il faudrait sûrement commencer par séparer "tab" en deux, avec d'un côté la partie avec des valeurs entières pour les niveaux et de l'autres celle avec les NA. Appliquer le code de Gakusei sur la première partie, puis s'occuper de la dernière et l'accoler à la suite du tableau obtenu avec le code de Gakusei.

    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.

  7. #7
    Membre à l'essai
    Femme Profil pro
    Étudiant
    Inscrit en
    Avril 2012
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2012
    Messages : 23
    Points : 13
    Points
    13
    Par défaut
    Les NA sont dans la colonne B.
    En fait, et je pense que je problème peut venir de là, j'ai des niveaux qui sont doublés.

  8. #8
    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 : 35
    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
    Points : 2 673
    Points
    2 673
    Par défaut
    Citation Envoyé par Jesk34 Voir le message
    Les NA sont dans la colonne B.
    Personnellement, j'ai testé le code de Gakusei sur les données suivantes (donc avec des NA dans la colonne B) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    >tab
    A B
    1 0.60
    1 0.89
    1 0.65
    1 0.12
    2 0.53
    2 0.94
    3 0.15
    3 0.56
    3 NA
    3 0.38
    3 0.89
    Et cela fonctionne parfaitement, donc je ne vois pas bien où ça peut coincer pour vous (et sans exemple de données sur lesquelles le problème est rencontré, difficile de vous en dire plus... :/ ).

    Citation Envoyé par Jesk34 Voir le message
    En fait, et je pense que je problème peut venir de là, j'ai des niveaux qui sont doublés.
    Qu'entendez-vous par des "niveaux qui sont doublés"?
    Encore une fois, sans exemple de données, difficile de voir d'où vient le problème...


    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.

  9. #9
    Membre à l'essai
    Femme Profil pro
    Étudiant
    Inscrit en
    Avril 2012
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2012
    Messages : 23
    Points : 13
    Points
    13
    Par défaut
    ex.xls

    Je voulais dire par doublés que à 205 ça repartait à 201. Donc j'ai deux fois certains niveaux à plusieurs reprises

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    comput=matrix(NA,nrow=1253,ncol=296);
    for (niveau in 1:3){
       comput[ 1:sum(tab$A==niveau) , niveau ] = tab$B[ tab$A==niveau ];
    }

  10. #10
    Membre averti
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2012
    Messages
    291
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2012
    Messages : 291
    Points : 434
    Points
    434
    Par défaut
    Citation Envoyé par Jesk34 Voir le message
    Je voulais dire par doublés que à 205 ça repartait à 201. Donc j'ai deux fois certains niveaux à plusieurs reprises
    Si j'ai bien compris tu veux dire que tab$A n'est pas trié:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    > sum(tab$A==sort(tab$A))
    [1] 15596
    > length(tab$A)
    [1] 17948
    Dans ce cas il faut trier au préalable.
    Pour cela il faut penser à utiliser help(order):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    ordonner=order(tab$A);
    tab$B=tab$B[ordonner];
    tab$A=sort(tab$A);

  11. #11
    Membre à l'essai
    Femme Profil pro
    Étudiant
    Inscrit en
    Avril 2012
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2012
    Messages : 23
    Points : 13
    Points
    13
    Par défaut
    Ah, c'est obligé d'ordonner ? Parce que ça change pas mal mes données. Bon s'il n'y a pas le choix...

  12. #12
    Membre averti
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2012
    Messages
    291
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2012
    Messages : 291
    Points : 434
    Points
    434
    Par défaut
    C'est obligé si tu veux obtenir des résultats qui correspondent à ton problème...
    Après si tu ne veux pas changer tes données il suffit d'utiliser d'autres variables:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    ord=order[tab$A];
    B=ta$B[ord];
    A=sort(tab$A);

  13. #13
    Membre à l'essai
    Femme Profil pro
    Étudiant
    Inscrit en
    Avril 2012
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2012
    Messages : 23
    Points : 13
    Points
    13
    Par défaut
    Ok, je vais voir ça du coup.

Discussions similaires

  1. [XL-2003] Fusionner des lignes en doublons
    Par pointp dans le forum Excel
    Réponses: 13
    Dernier message: 14/04/2010, 12h23
  2. fusionner des lignes d'un datagrid ?
    Par Pascale38 dans le forum Flex
    Réponses: 14
    Dernier message: 06/10/2008, 17h33
  3. Réponses: 1
    Dernier message: 15/09/2008, 10h43
  4. Fusionner des lignes en resultat
    Par kalagool dans le forum DB2
    Réponses: 3
    Dernier message: 30/04/2008, 15h31
  5. [SQL-VBA]fusionner des lignes
    Par shagun dans le forum Requêtes et SQL.
    Réponses: 42
    Dernier message: 13/04/2007, 13h37

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