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 :

somme par ligne avec plusieurs variables


Sujet :

R

  1. #1
    Membre à l'essai
    Homme Profil pro
    AgroParisTech
    Inscrit en
    Mai 2020
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 26
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : AgroParisTech
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Mai 2020
    Messages : 22
    Points : 19
    Points
    19
    Par défaut somme par ligne avec plusieurs variables
    Bonjour,

    Voici une partie de ma base de données Nom : Capture.JPG
Affichages : 126
Taille : 20,5 Ko

    HT05ESS1, HT05ESS2 et HT05ESS3 correspondent à des essences forestières (plusieurs essences différentes dans une même colonne). Les NB1_HT05,..., correspondent aux nombres d'arbres observés et les NAB1_05 correspondent aux arbres abîmés.

    Je souhaitais obtenir un nouveau tableau qui sommerait le nombre d'arbre par essence sous cette forme :

    Nom : Capture2.JPG
Affichages : 118
Taille : 15,6 Ko

    J'ai essayé de modifier la structure de mon tableau puis j'ai utilisé la fonction tapply() mais je n'obtiens rien de convainquant...

    Avez-vous des idées ?

    Merci,
    David

  2. #2
    Membre expérimenté
    Inscrit en
    Novembre 2009
    Messages
    703
    Détails du profil
    Informations forums :
    Inscription : Novembre 2009
    Messages : 703
    Points : 1 311
    Points
    1 311
    Par défaut agrégation, transposition
    Bonjour,

    Vous n'êtes pas très aidant dans la présentation du problème (il serait préférable de donner une entrée et une sortie qui se correspondent et il est préférable aussi de fournir un dataframe ou un fichier texte plutôt qu'une copie d'écran).

    Si j'ai bien compris :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    df <- data.frame(HT05ESS1 = c("S.P","S.P","S.P","S.P","S.P","EPC"),
                     NB1_HT05 = c(0,1,3,0,0,9),
                     NB1_H05  = c(0,1,1,0,0,2),
                     HT05ESS2 = c("EPC","EPC","EPC","EPC","EPC","EPC"),
                     NB2_HT05 = c(0,0,0,5,6,0),
                     NB2_H05  = c(0,0,0,1,2,0))
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    > df
      HT05ESS1 NB1_HT05 NB1_H05 HT05ESS2 NB2_HT05 NB2_H05
    1      S.P        0       0      EPC        0       0
    2      S.P        1       1      EPC        0       0
    3      S.P        3       1      EPC        0       0
    4      S.P        0       0      EPC        5       1
    5      S.P        0       0      EPC        6       2
    6      EPC        9       2      EPC        0       0
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    df <- rbind(setNames(df[,1:3],c("HT05ESS","NB_HT05","NB_H05")),
                setNames(df[,4:6],c("HT05ESS","NB_HT05","NB_H05")))
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    > df
       HT05ESS NB_HT05 NB_H05
    1      S.P       0      0
    2      S.P       1      1
    3      S.P       3      1
    4      S.P       0      0
    5      S.P       0      0
    6      EPC       9      2
    7      EPC       0      0
    8      EPC       0      0
    9      EPC       0      0
    10     EPC       5      1
    11     EPC       6      2
    12     EPC       0      0
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    result <- aggregate(cbind(NB_HT05,NB_H05) ~ HT05ESS, data=df, sum)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    > result
      HT05ESS NB_HT05 NB_H05
    1     EPC      20      5
    2     S.P       4      2
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    col_names <- result$HT05ESS
    row_names <- names(result[,-1])
    result <- data.table::transpose(result[,-1])
    names(result) <- col_names
    row.names(result) <- row_names
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    > result
            EPC S.P
    NB_HT05  20   4
    NB_H05    5   2
    Cordialement

  3. #3
    Membre à l'essai
    Homme Profil pro
    AgroParisTech
    Inscrit en
    Mai 2020
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 26
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : AgroParisTech
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Mai 2020
    Messages : 22
    Points : 19
    Points
    19
    Par défaut
    Bonjour,

    Merci pour votre réponse.
    En exécutant le code ci-dessous :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    result <- aggregate(cbind(NB_HT05,NB_H05) ~ HT05ESS, data=df, sum)
    J'obtiens le message d'erreur suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    Error in mean.default(cbind(NB_HT05, NB_H05), HT05ESS) : 
      'trim' must be numeric of length one
    Je ne comprends pas l'erreur, à quoi correspond 'trim' ?

    Merci

  4. #4
    Membre expérimenté
    Inscrit en
    Novembre 2009
    Messages
    703
    Détails du profil
    Informations forums :
    Inscription : Novembre 2009
    Messages : 703
    Points : 1 311
    Points
    1 311
    Par défaut agrégation, transposition
    Bonjour,

    Pouvez-vous fournir un dataframe permettant de reproduire l'erreur ?

    Avec mes remerciements,

  5. #5
    Membre à l'essai
    Homme Profil pro
    AgroParisTech
    Inscrit en
    Mai 2020
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 26
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : AgroParisTech
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Mai 2020
    Messages : 22
    Points : 19
    Points
    19
    Par défaut
    Voici une partie du dataframe :

    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
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
     
    > df
        HT05ESS NB_HT05 NB_H05
    1       S.P       0      0
    2       S.P       1      1
    3       S.P       3      3
    4       S.P       0      0
    5       S.P       0      0
    6       S.P       0      0
    7       S.P       0      0
    8       S.P       0      0
    9       S.P       1      1
    10      EPC       1      1
    11      S.P       0      0
    12      S.P       1      1
    13      S.P       1      1
    14      S.P       0      0
    15      S.P       2      2
    16                0      0
    17      S.P       0      0
    18      S.P      10      9
    19      EPC       1      1
    20      EPC      10      5
    21      EPC       0      0
    22      EPC       2      2
    23      HET       2      2
    24      S.P       1      1
    25      HET       0      0
    26      HET       0      0
    27      HET       0      0
    28      HET       0      0
    29      HET       0      0
    30      HET       1      1
    31      HET       1      1
    32      S.P       1      1
    33      S.P       0      0
    34      S.P       3      3
    35      S.P       0      0
    36      S.P       0      0
    37      S.P       0      0
    38      S.P       0      0
    39      S.P       6      6
    40      EPC       0      0
    41      EPC       2      2
    42      S.P       0      0
    43      S.P       0      0
    44      S.P       0      0
    45      S.P       1      1
    46      S.P       0      0
    47      S.P       0      0
    48      S.P       3      3
    49      S.P       1      1
    50      S.P       0      0
    51      S.P       0      0
    52      S.P       1      1
    53      S.P       5      4
    54      S.P       2      2
    55      HET       5      2
    56      HET       5      1
    57      EPC       1      1
    58      EPC       2      2
    59      S.P       1      1
    60      HET       0      0
    61      HET       0      0
    62      HET      10     10
    63      HET       8      8
    64      HET      10     10
    65      HET       0      0
    66      HET       0      0
    67      HET       0      0
    68      HET       0      0
    69      HET       0      0
    70      HET       0      0
    71      HET       0      0
    72      HET       0      0
    73      HET       1      1
    74      HET       0      0
    75      HET       1      1
    76      HET       0      0
    77      HET       0      0
    78      HET       0      0
    79      HET       0      0
    80      HET       0      0
    81      HET       0      0
    82      HET       0      0
    83      HET       1      1
    84      HET       2      2
    85      HET       1      1
    86      HET       3      1
    87      HET       0      0
    88      HET       1      1
    89      HET       6      6
    90      HET       0      0
    91      HET       2      1
    92      HET       0      0
    93      HET       2      0
    94      HET       0      0
    95      HET       0      0
    96      HET       0      0
    97      HET       5      1
    98      S.P       0      0
    99      S.P       0      0
    100     S.P       0      0
    101     S.P       0      0
    102     S.P       2      0
    103     EPC       1      1
    104     DOU       0      0
    105     DOU       1      1
    106     EPC       1      1
    107     EPC       2      2
    108     EPC       5      4
    109     S.P       5      5
    110     S.P       1      1
    111     EPC       2      0
    112     S.P       0      0
    113     S.P       5      5
    114     EPC       0      0
    115     EPC       1      1
    116     EPC       1      0
    117     EPC       0      0
    118     EPC       0      0
    119     S.P       2      2
    120     EPC      10      9
    121     S.P      10      5
    122     HET       0      0
    123     HET       1      1
    124     EPC       2      2
    125     EPC       3      2
    126     EPC       0      0
    127     EPC       0      0
    128     EPC      10      9
    129     EPC       0      0
    130     EPC       1      1
    131     EPC       0      0
    132     EPC       1      1
    133     S.P       0      0
    134     S.P      10      3
    135     S.P       5      5
    136     S.P       6      5
    137     HET       3      0
    138     ERS       2      0
    139     ERS       3      0
    140     S.P       0      0
    141     S.P       2      1
    142     EPC      10      9
    143     A.F       0      0
    144     DOU       1      1
    145     S.P       1      1
    146     EPC       0      0
    147     EPC       4      0
    148     P.S       1      0
    149               0      0

  6. #6
    Membre expérimenté
    Inscrit en
    Novembre 2009
    Messages
    703
    Détails du profil
    Informations forums :
    Inscription : Novembre 2009
    Messages : 703
    Points : 1 311
    Points
    1 311
    Par défaut agrégation, transposition
    Bonjour,

    Je n'arrive pas à reproduire l'erreur :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    > df <- read.csv("D:/temp/test.txt")
    > aggregate(cbind(NB_HT05,NB_H05) ~ HT05ESS, data=df, sum)
      HT05ESS NB_HT05 NB_H05
    1               0      0
    2     A.F       0      0
    3     DOU       2      2
    4     EPC      73     56
    5     ERS       5      0
    6     HET      71     52
    7     P.S       1      0
    8     S.P      93     75
    Pouvez-vous essayer avec le fichier ci-joint ?

    Si vous obtenez toujours l'erreur je vous conseille de désinstaller R, de supprimer le répertoire d'installation et de réinstaller R.

    Sinon veuillez fournir un dataframe permettant de reproduire l'erreur en préférant une étape data.frame() ou un fichier csv, merci.

    Cordialement,
    Fichiers attachés Fichiers attachés

  7. #7
    Membre à l'essai
    Homme Profil pro
    AgroParisTech
    Inscrit en
    Mai 2020
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 26
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : AgroParisTech
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Mai 2020
    Messages : 22
    Points : 19
    Points
    19
    Par défaut
    Bonjour,

    Je n'ai pas réussi à charger la pièce jointe en .csv, j'espère que le format .xls fera l'affaire...

    J'ai essayé sur un autre pc, l'erreur est identique.

    Merci pour votre implication
    Fichiers attachés Fichiers attachés

  8. #8
    Membre à l'essai
    Homme Profil pro
    AgroParisTech
    Inscrit en
    Mai 2020
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 26
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : AgroParisTech
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Mai 2020
    Messages : 22
    Points : 19
    Points
    19
    Par défaut tapply au lieu d'aggregate
    J'ai réussi à obtenir le résultat souhaité mais à l'aide d'une autre méthode

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    df <- rbind(setNames(donne[,18:20],c("HT05ESS","NB_HT05","NB_H05")),        
                setNames(donne[,21:23],c("HT05ESS","NB_HT05","NB_H05")),
                setNames(donne[,24:26],c("HT05ESS","NB_HT05","NB_H05")))
     
    a<- tapply(df$NB_HT05, df$HT05ESS, sum)
    b <- tapply(df$NB_H05, df$HT05ESS, sum)
     
    c <- data.frame(a,b)
    setnames(c, "a", "nombre de semis total")                     
    setnames(c, "b", "nombre de semis abroutti")                  
    t(c)                                                         
    c
    Merci pour votre aide,
    David

  9. #9
    Membre expérimenté
    Inscrit en
    Novembre 2009
    Messages
    703
    Détails du profil
    Informations forums :
    Inscription : Novembre 2009
    Messages : 703
    Points : 1 311
    Points
    1 311
    Par défaut agrégation, transposition
    Bonjour,

    Je suis contente que vous ayez trouvé une solution.

    Je n'arrive pas à reproduire l'erreur avec votre fichier :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    > df <- read.csv("D:/temp/tableau.txt")
    > aggregate(cbind(NB_HT05,NB_H05) ~ HT05ESS, data=df, sum)
      HT05ESS NB_HT05 NB_H05
    1               0      0
    2     A.F       0      0
    3     DOU       6      5
    4     EPC     119     95
    5     ERS       8      2
    6     HET      80     59
    7     P.S       3      0
    8     S.P     111     93
    Il serait intéressant de comprendre pourquoi ça ne fonctionne pas pour vous. Pouvez-vous essayer en important le fichier ?

    Cordialement,
    Fichiers attachés Fichiers attachés

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

Discussions similaires

  1. Réponses: 7
    Dernier message: 13/09/2006, 16h05
  2. Lire un fichier ligne par ligne avec Awk
    Par Krispy dans le forum Linux
    Réponses: 8
    Dernier message: 07/09/2006, 15h14
  3. Requête qui fait une somme par ligne
    Par snoopy69 dans le forum Requêtes et SQL.
    Réponses: 1
    Dernier message: 10/08/2006, 08h30
  4. Réponses: 2
    Dernier message: 09/01/2006, 16h10
  5. somme par lignes
    Par thauvinl dans le forum Langage SQL
    Réponses: 1
    Dernier message: 14/10/2005, 11h25

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