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 :

Manipulation data frame : agréger sous plusieurs conditions


Sujet :

R

  1. #1
    Membre à l'essai
    Femme Profil pro
    Étudiant
    Inscrit en
    Novembre 2014
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Réunion

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Novembre 2014
    Messages : 13
    Points : 16
    Points
    16
    Par défaut Manipulation data frame : agréger sous plusieurs conditions
    Bonjour à tous,

    Je souhaiterai agréger certaines lignes de mon data.frame qui se présente comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    > HA
                V2           V3           V6      V8    V9
       1: 20/04/2016 13:27:48.62 982_000402954704  1 40340
       2: 20/04/2016 13:27:49.63 982_000402954704 12    10
       3: 20/04/2016 13:58:59.90 982_000402954704  1 18583
       4: 20/04/2016 13:59:00.11 982_000402954704  6     1
       5: 20/04/2016 13:59:00.91 982_000402954704  1     2
    Si deux lignes présentent : 1/la même date V2 + 2/le même code V6 + 3/un chiffre V9 inférieur à 10
    Alors, je voudrais agréger ces lignes en gardant : 1/l'heure V3 de la 1ère ligne, 2/la somme des V8 et V9

    Le résultat attendu serait (les deux dernières lignes ont été agrégées):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    > HA
                V2           V3           V6      V8    V9
       1: 20/04/2016 13:27:48.62 982_000402954704  1 40340
       2: 20/04/2016 13:27:49.63 982_000402954704 12    10
       3: 20/04/2016 13:58:59.90 982_000402954704  1 18583
       4: 20/04/2016 13:59:00.11 982_000402954704  7     3
    J'ai tenté plusieurs codes mais je pense que la meilleure forme serait une boucle for sur tout le data.frame, du type :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    for (i in 1:nrow(HA))
    {
        if (HA$V6[i] == HA$V6[i+1] & HA$V2[i] == HA$V2[i+1]  & HA$V9 < 10)
        {
          aggregate(HA$V8, list(HA$V2, HA$V3, HA$V6), sum)
        }
    }
    Est-ce que quelqu'un aurait des pistes pour arriver au résultat voulu ?

    Merci beaucoup !

  2. #2
    Membre habitué
    Homme Profil pro
    Ingénieur de recherche
    Inscrit en
    Décembre 2015
    Messages
    72
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

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

    Informations forums :
    Inscription : Décembre 2015
    Messages : 72
    Points : 180
    Points
    180
    Par défaut
    Bonjour,

    A ma connaissance, il n'est pas possible d'utiliser aggregate avec une condition.

    Sinon, on peut sélectionner les données qui satisfont cette condition, faire l'aggrégation dessus. Ensuite, concaténer les données entre celles aggrégées (qui vérifiaient la condition), puis les autres.

    Une idée de code
    Code R : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    #On sépare le jeu de donnes en deux
    sub.data1<-data[data$V9<9,]
    subdata2<-data[data$V9>=9,]
    #On ne fait que les aggrégations sur les données vérifiant la condition
    res.agg<-aggregate(sub.data1, list(sub.data1$V2, sub.data1$V6,sub.data1$V3), sum)
    #On concatène le résultat (Penser à vérifier le même agencement des colonnes)
    data<-rbind(subdata2,reg.agg)

    J'espère que cela vous aidera.

    VV

Discussions similaires

  1. [XL-2010] Calcul d'écart type sous plusieurs conditions
    Par Pocken dans le forum Excel
    Réponses: 6
    Dernier message: 28/03/2014, 15h02
  2. Créer une data.frame à partir de plusieurs listes
    Par charlotte77 dans le forum R
    Réponses: 4
    Dernier message: 10/06/2013, 23h38
  3. VBA Excel 2003 Copier ligne sous plusieurs conditions
    Par Harreauv dans le forum Macros et VBA Excel
    Réponses: 9
    Dernier message: 31/01/2013, 18h40
  4. [XL-2003] Compter nombre de cellules sous plusieurs conditions
    Par coklin dans le forum Excel
    Réponses: 10
    Dernier message: 11/09/2009, 14h48
  5. Somme sous plusieurs conditions
    Par neeux dans le forum Excel
    Réponses: 5
    Dernier message: 04/07/2007, 14h53

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