1. #1
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    novembre 2017
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 23
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : novembre 2017
    Messages : 2
    Points : 3
    Points
    3

    Par défaut Une fusion un peu particulière?

    Bonjour amis développeurs,

    Dans le cadre d'un projet pour mon université, je bloque sur une petite manipulation... Plutôt que vous présenter tout mon projet, je vais vous illustrer ce que je souhaite faire.

    J'ai :
    a b a d
    A 1 1 0 0
    B 0 0 1 1

    Je souhaite :

    a b d
    A 1 1 0
    B 1 0 1

    C'est donc tout bête. J'ai plusieurs colonnes avec le même nom que je souhaite repérer puis réunir. Evidemment je souhaite un code qui puisse s'appliquer à une matrice beaucoup plus grande (la colonne nommée "a" peut apparaître plus que 2 fois).

    A vos clavier
    Merci d'avance!

  2. #2
    Membre éclairé
    Homme Profil pro
    Ingénieur de recherche
    Inscrit en
    janvier 2012
    Messages
    265
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur de recherche
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : janvier 2012
    Messages : 265
    Points : 700
    Points
    700

    Par défaut

    La fonction aggregate fait ce genre de chose.

  3. #3
    Membre régulier
    Inscrit en
    février 2011
    Messages
    54
    Détails du profil
    Informations forums :
    Inscription : février 2011
    Messages : 54
    Points : 99
    Points
    99

    Par défaut

    Bonjour,

    je ne suis pas convaincu que la fonction aggregate permette de faire ce genre de manipulation.
    Si tes données sont stockées dans une matrice alors tu peux faire comme ceci (il doit y a voir plus efficace et plus élégant aussi) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    #soit tab le nom de ta matrice
    t(rowsum(t(tab), colnames(tab)))
      a b d
    A 1 1 0
    B 1 0 1
    cdlt

  4. #4
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    novembre 2017
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 23
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : novembre 2017
    Messages : 2
    Points : 3
    Points
    3

    Par défaut

    Tout d'abord merci à vous deux !

    J'ai essayé d'utiliser la fonction aggregate en vint (ça vient peut être de moi...). Je vais utiliser ta réponse Tototode qui est bien plus élégante que la mienne (qui contient environ 6 boucles xD, oui je suis accro aux boucles). Encore merci, à une prochaine!

  5. #5
    Membre éclairé
    Homme Profil pro
    Ingénieur de recherche
    Inscrit en
    janvier 2012
    Messages
    265
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur de recherche
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : janvier 2012
    Messages : 265
    Points : 700
    Points
    700

    Par défaut

    Je ne connaissait pas la fonction rowsum, qui est en fait un cas particulier/simplifié de la fonction aggregate qui aurait très bien marché ici, mais aurait été plus compliquée à utiliser.

    @AlexisMa : Les boucles on en utilise partout dans plein de langages, mais en R quand on fait une boucle, 95% du temps on devrais pas.

  6. #6
    Membre régulier
    Inscrit en
    février 2011
    Messages
    54
    Détails du profil
    Informations forums :
    Inscription : février 2011
    Messages : 54
    Points : 99
    Points
    99

    Par défaut

    qui est en fait un cas particulier/simplifié de la fonction aggregate
    Ca peut sembler être le cas mais je ne vois rien dans le code des fonctions qui aille dans le sens de cette affirmation. Les fonctions aggregate et rowsum ont des fonctionnement très différents :
    - rowsum fait appel à du code interne avec pour unique objectif de faire des somme sur les lignes,
    - aggregate fait appel à des lapply avec la fonction fun de ton choix. Le résultat peut être identique effectivement mais la manière d'y arriver très différente et donc le temps de calcul aussi (même si sur ce genre de manipulation la différence ne doit pas être visible).

    Une autre possiblité :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sapply(unique(colnames(tab)), function(x) rowSums(tab[, x, drop = FALSE]))
    cdlt

  7. #7
    Membre éclairé
    Homme Profil pro
    Ingénieur de recherche
    Inscrit en
    janvier 2012
    Messages
    265
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur de recherche
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : janvier 2012
    Messages : 265
    Points : 700
    Points
    700

    Par défaut

    Je parlais de l'utilisation de ces fonctions et non de leur fonctionnement interne ou de leur performances.

    Les deux fonctions s'utilisent de manières très proches pour des résultats très proches :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    aggregate(t(tab), list(colnames(tab)), sum)
      Group.1 A B
    1       a 1 1
    2       b 1 0
    3       d 0 1
    Bon là du coup rowsum a l'avantage de renvoyer directement une matrice sous la forme voulue donc autant l'utiliser.


    Après, oui, aggregate sur de gros jeux de données ça posera effectivement des problèmes de performances. Mais de mémoire en dessous de 100 000 lignes il n'y a pas de soucis.

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 06/07/2011, 13h48
  2. Réduire une figure un peu particulière (?)
    Par GDMINFO dans le forum Tableaux - Graphiques - Images - Flottants
    Réponses: 2
    Dernier message: 17/06/2009, 14h45
  3. Une requete un peu particulière ...
    Par ZiMammouth dans le forum Langage SQL
    Réponses: 6
    Dernier message: 24/02/2007, 18h27
  4. Une mise page un peu particulière
    Par krapoulos2006 dans le forum Mise en page CSS
    Réponses: 2
    Dernier message: 20/12/2006, 16h45

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