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 :

adapter FUN=sum dans fonction aggregate


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 adapter FUN=sum dans fonction aggregate
    Bonjour,

    Toujours aussi nulle sous R, j'ai encore un problème existentiel !

    J'ai un tableau du type :
    Navire Sequence_peche annee mois Rect div_ciem Met5 Met6 ESP Poids montant
    Nav1 18/08/2000 2000 8 R 37.1.2 eng5 eng5-6 AUT 644 1609
    Nav1 18/08/2000 2000 8 R 37.1.2 eng5 eng5-6 MUR 10 12
    Nav1 18/08/2000 2000 8 R 37.1.2 eng5 eng5-6 NAS 238 713
    Nav2 21/08/2000 2000 8 R 37.1.2 eng5 eng5-6 AUT 11 29
    Nav2 21/08/2000 2000 8 R 37.1.2 eng5 eng5-6 MUR 688 825
    Nav2 21/08/2000 2000 8 R 37.1.2 eng5 eng5-6 NAS 67 201
    Nav3 23/08/2000 2000 8 R 37.1.2 eng5 eng5-6 AUT 626 1566
    Nav3 23/08/2000 2000 8 R 37.1.2 eng5 eng5-6 MUR 31 37
    Nav3 23/08/2000 2000 8 R 37.1.2 eng5 eng5-6 NAS 708 2123

    et je voudrais faire une sorte de tableau croisé qui me donnerait ceci :

    Navire Sequence_peche annee mois Rect div_ciem Met5 Met6 AUT MUR NAS
    1 Nav1 18/08/2000 00:00 2000 8 R 37.1.2 eng5 eng5-6 1 1 1
    2 Nav2 21/08/2000 00:00 2000 8 R 37.1.2 eng5 eng5-6 1 1 1
    3 Nav3 23/08/2000 00:00 2000 8 R 37.1.2 eng5 eng5-6 1 1 1

    obtenu par :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    mydata <- read.table("TCD1.txt", header=TRUE, dec=",", sep="\t")
     
    EndFile <- aggregate(cbind(AUT=mydata$ESP=="AUT", MUR=mydata$ESP=="MUR",NAS=mydata$ESP=="NAS"), FUN=sum, na.rm=T, 
                         by=list(Navire=mydata$Navire, Sequence_peche=mydata$Sequence_peche, annee=mydata$annee, mois=mydata$mois,
                                 Rect=mydata$Rect, div_ciem=mydata$div_ciem, Met5=mydata$Met5, Met6=mydata$Met6),
                         simplify = TRUE)
    Je voudrais adapter le FUN=sum pour avoir la somme des poids à la place des 1 pour les espèces. C'est à dire retrouver les 644, 10 et 238 pour la première ligne.
    J'ai fait plusieurs tests infructueux que je n'ose même pas poster.....
    Il est important de pouvoir garder les 8 premières colonnes !

    Merci pour votre aide.
    A +

    Muriel.

  2. #2
    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
    Bonjour,

    J'avance petit à petit.....
    Ce code me paraît être une bonne piste
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    xtabs(Poids ~ Navire + ESP, data = mydata)
    C'est bien ce que je recherche mais malheureusement, je ne garde que la colonne Navire et je voudrais retrouver toutes les colonnes descriptives de Navires à Met6

    Si j'utilise la fonction ddply, je garde toutes mes colonnes descriptives mais je n'ai pas mes espèces en 3 colonnes à la fin
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    library(plyr)
    em <- ddply(mydata, c("Navire","Sequence_peche", "annee", "mois", "Rect", "div_ciem", "Met5", "Met6"),
                summarise, s = sum(Poids))
    Quelqu'un pourrait m'aider à compiler tout ça HELP !!
    Merci.
    A +

    Muriel.

  3. #3
    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,

    Je pense que tu devrais jeter un oeil du côté du package "dplyr" (voir par exemple la doc ici).

    Un petit exemple qui se rapproche (je pense) de ce que tu recherches :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    # création du jeu de données pour pouvoir tester
    data <- data.frame(
      Navire = c("Nav1", "Nav1", "Nav1", "Nav2", "Nav2", "Nav2","Nav3", "Nav3", "Nav3"),
      Sequence_peche = c("18/08/2000", "18/08/2000", "18/08/2000", "21/08/2000", "21/08/2000", "21/08/2000", "23/08/2000", "23/08/2000", "23/08/2000"),
      annee = rep(2000, 9),
      mois = rep(8, 9),
      Rect = rep("R", 9),
      div_ciem = rep("37.1.2", 9),
      Met5 = rep("eng5", 9),
      Met6 = rep("eng5-6", 9),
      ESP = c("AUT", "MUR", "NAS", "AUT", "MUR", "NAS", "AUT", "MUR", "NAS"),
      Poids = c(644, 10, 238, 11, 688, 67, 626, 31, 708),
      montant = c(1609, 12, 713, 29, 825, 201, 1566, 37, 2123)
    )
     
    library(dplyr)  # chargement du package, doit être installé au préalable
     
    # Manipulation des données :
     
    new_data <- data %>% group_by(Navire) %>% summarize(
      Sequence_peche = first(Sequence_peche),
      annee = first(annee),
      mois = first(mois),
      Rect = first(Rect),
      div_ciem = first(div_ciem),
      Met5 = first(Met5),
      Met6 = first(Met6),
      AUT = Poids[which(ESP=="AUT")], 
      MUR = Poids[which(ESP=="MUR")], 
      NAS = Poids[which(ESP=="NAS")])
     
    as.data.frame(new_data)
     
    #   Navire Sequence_peche annee mois Rect div_ciem Met5   Met6 AUT MUR NAS
    # 1   Nav1     18/08/2000  2000    8    R   37.1.2 eng5 eng5-6 644  10 238
    # 2   Nav2     21/08/2000  2000    8    R   37.1.2 eng5 eng5-6  11 688  67
    # 3   Nav3     23/08/2000  2000    8    R   37.1.2 eng5 eng5-6 626  31 708
    HTH !


    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.

  4. #4
    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 A. D.

    C'est exactement ce que je recherche !!!!!!!!!!!!
    Je te remercie pour ta solution.
    J'avais vu le package dplyr sur le net mais je n'ai pas réussi à le "coder" comme il faut dans mon script.

    Super !

    A bientôt (surement)

    Muriel

  5. #5
    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
    De rien

    Et franchement, pour tout ce qui est manipulation de données, je trouve que le package "dplyr" est une vraie merveille ! Il demande un petit temps de prise en main c'est vrai, mais que de facilités ensuite... ^^


    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.

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

Discussions similaires

  1. Fonction agrégat SUM dans calcul SQL
    Par othke dans le forum Requêtes et SQL.
    Réponses: 4
    Dernier message: 19/02/2010, 11h05
  2. [XL-2003] pb range dans fonction sum
    Par bebel9313 dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 08/08/2009, 10h37
  3. explication sur le fonction Sum dans qreport
    Par youcef_b_dz dans le forum Bases de données
    Réponses: 3
    Dernier message: 19/05/2007, 14h04
  4. [ACCESS2002][fonction sum dans une requête]
    Par louroulou dans le forum Access
    Réponses: 1
    Dernier message: 14/06/2006, 10h26
  5. [VBA-E] Fonction sum() dans une cellule
    Par Gonzo dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 16/12/2002, 11h18

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