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 :

Agrégation données dataframe


Sujet :

R

  1. #1
    Membre du Club
    Femme Profil pro
    Ingénieur environnement
    Inscrit en
    Septembre 2007
    Messages
    90
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 48
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Ingénieur environnement

    Informations forums :
    Inscription : Septembre 2007
    Messages : 90
    Points : 68
    Points
    68
    Par défaut Agrégation données dataframe
    Bonjour,

    N'ayant pas trouvé mon bonheur dans le forum (mauvais choix des mots clefs ?) je me permets de solliciter votre aide.

    J'ai un tableau de données qui fait 22 colonnes, dans une des colonnes (foCatEu5) je voudrais agréger les données et faire une somme par lignes des 3 dernières colonnes (voir fichier joint). Dans mon exemple, on agrège les lignes 1 et 2 puis 3 et 4.
    Je voudrais garder les 22 colonnes. J'ai écrit ce bout de code qui bien sur ne fonctionne pas :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    CL2 <- CL[,list(landWt=sum(landWt, na.rm=T), landMult=sum(landMult, na.rm=T), landValue=sum(landValue, na.rm=T)),
              by=list(landCtry=landCtry,vslFlgCtry=vslFlgCtry,year=year,quarter=quarter,month=month,
              area=area,rect=rect,subRect=subRect,taxon=taxon,landCat=landCat,commCatScl=commCatScl,
              commCat=commCat,foCatNat=foCatNat,foCatEu5=foCatEu5,foCatEu6=foCatEu6,harbour=harbour,vslLenCat=vslLenCat)]
    Pouvez-vous me donner un coup de main sachant que je suis une débutante sous R ?
    Je vous remercie.

    Mumu

  2. #2
    Membre éclairé
    Homme Profil pro
    Ingénieur de recherche
    Inscrit en
    Janvier 2012
    Messages
    325
    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 : 325
    Points : 888
    Points
    888
    Par défaut
    Utilise les balises code.
    Par ailleurs, je n'arrive pas à comprendre ce que tu as essayé de faire dans ton code.

    Pour agréger des données, la fonction aggregate semble tout indiquée.

    Exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    df=data.frame(A=letters[2:12 %/% 2],B=runif(11,0,1),C=letters[14:24 %/% 2])#Création d'un jeu de données de test
    aggregate(df[2:3],by=list(df$A),FUN=function(x){if(class(x)=="numeric") sum(x) else x[1]})

  3. #3
    Membre du Club
    Femme Profil pro
    Ingénieur environnement
    Inscrit en
    Septembre 2007
    Messages
    90
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 48
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Ingénieur environnement

    Informations forums :
    Inscription : Septembre 2007
    Messages : 90
    Points : 68
    Points
    68
    Par défaut
    Salut Theta,

    Merci pour cette réponse mais j'avoue que je ne sais pas la modifier pour qu'elle colle à mes données.
    J'avais tenté la fonction aggregate :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    essai <- aggregate(list(landWt=CL$landWt,landMult=CL$landMult,landValue=CL$landValue),
                             by=list(landCtry=CL$landCtry,vslFlgCtry=CL$vslFlgCtry,year=CL$year,quarter=CL$quarter,month=CL$month,
                             area=CL$area,rect=CL$rect,subRect=CL$subRect,taxon=CL$taxon,landCat=CL$landCat,commCatScl=CL$commCatScl,
                             commCat=CL$commCat,foCatNat=CL$foCatNat,foCatEu5=CL$foCatEu5,foCatEu6=CL$foCatEu6,harbour=CL$harbour,vslLenCat=CL$vslLenCat), FUN=sum)
    Mais mon objet "essai" est vide.
    Je n'ai pas précisé que je veux garder mes 22 colonnes.

    Merci

  4. #4
    Membre éclairé
    Homme Profil pro
    Ingénieur de recherche
    Inscrit en
    Janvier 2012
    Messages
    325
    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 : 325
    Points : 888
    Points
    888
    Par défaut
    Comme ça je vois pas pourquoi ton code marche pas, mais une petite remarque :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    list(landWt=CL$landWt,landMult=CL$landMult,landValue=CL$landValue)
    C'est pas très propre comme manière de sélectionner des colonnes, d'autant que le résultat est une liste et non plus une dataframe (même si R est capable de faire la conversion).
    Cette manière est plus claire, plus rapide et plus pratique quand on veut en plus sélectionner par ligne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    CL[,c("landWt","landMult","landValue")]
    De plus en faisant comme ça tu peux utiliser des conditions R plutôt que d'écrire toutes les colones une par une.
    Par exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    CL[,!names(CL) %in% c("landWt","landMult","landValue")]#Toutes les colonnes sauf celles de la liste
    CL[, sapply(df,class) == "numeric"]#Toutes les colones numériques
    CL[, 1:3]#les 3 premières colones
    CL[, c(-2,-4)]#Toutes les colones sauf la 2ème et la 4ème
    CL[1:10,]#Les 10 premières lignes
    #Etc

  5. #5
    Membre du Club
    Femme Profil pro
    Ingénieur environnement
    Inscrit en
    Septembre 2007
    Messages
    90
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 48
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Ingénieur environnement

    Informations forums :
    Inscription : Septembre 2007
    Messages : 90
    Points : 68
    Points
    68
    Par défaut
    Merci Theta d'avoir essayé et merci pour les conseils, je vais garder ces lignes de codes dans un petit coin.....
    Je vais continuer à bidouiller pour voir ce qui ne va pas. D'autant plus que cette même commande fonctionne sur un autre fichier qui a la même allure mais avec un nombre de colonne moindre. Mystère !
    A +

Discussions similaires

  1. Agrégation de données.
    Par benoitbs dans le forum MATLAB
    Réponses: 7
    Dernier message: 03/08/2009, 09h25
  2. [SSIS] [2K8] Agrégation de données
    Par DarkStarDS dans le forum SSIS
    Réponses: 1
    Dernier message: 07/04/2009, 16h56
  3. Réponses: 1
    Dernier message: 28/10/2008, 11h19
  4. Agrégation des données avec awk
    Par miketidy dans le forum Shell et commandes GNU
    Réponses: 4
    Dernier message: 14/06/2008, 07h50
  5. Agrégation des données dans JasperReport
    Par MiniDeb dans le forum Jasper
    Réponses: 3
    Dernier message: 21/02/2008, 10h56

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