Forum de Statistiques
Vous souhaitez réagir à ce message ? Créez un compte en quelques clics ou connectez-vous pour continuer.
Les posteurs les plus actifs de la semaine
Aucun utilisateur

Le Deal du moment : -23%
EVGA SuperNOVA 650 G6 – Alimentation PC 100% ...
Voir le deal
77.91 €

Somme suivant la valeur d'un champ dans une data.frame

4 participants

Aller en bas

dans - Somme suivant la valeur d'un champ dans une data.frame Empty Somme suivant la valeur d'un champ dans une data.frame

Message par HDKalit Ven 27 Sep 2013 - 13:04

(Re-)Bonjour tout le monde,

Encore une question qui fait suite à mon précédent post (en reprenant le même exemple).

J'ai une data frame de cette forme :

Code:

       Numero  Date                     Releve1        Releve2
       9001      20120801             220              2        
       9001      20120802             242              1      
       9001      20120803             219              0      
       9002      20120804             192              2        
J'aimerai sommer les valeurs du champ 'Releve1' et du champ 'Releve2' en fonction du Numéro et avoir en sortie quelque chose comme ça :

Code:

       Numero Sum_Releve1        Sum_Releve2
       9001      681                     3             
       9002      192                      2        
Pour le moment je passe avec des boucle for() mais sur une très grande data.frame c'est pas forcément optimale.

Receveur de tout conseil

Cordialement,

Khalid

HDKalit

Nombre de messages : 85
Date d'inscription : 10/01/2013

Revenir en haut Aller en bas

dans - Somme suivant la valeur d'un champ dans une data.frame Empty Re: Somme suivant la valeur d'un champ dans une data.frame

Message par popotam Dim 20 Oct 2013 - 7:43

Avec aggregate() mais tu ne peux faire qu'une colonne à la fois :

Code:
aggregate(Releve1~Numero, data=tondataframe, FUN=sum)
Avec ddply() c'est mieux, je ne connais pas la syntaxe par coeur mais la commande devrait ressembler à ça :

Code:
library(plyr)
ddply(tondataframe, .(Numero), summarize, sum1=sum(Releve1), sum2=sum(Releve2))

popotam

Nombre de messages : 371
Date d'inscription : 27/09/2006

Revenir en haut Aller en bas

dans - Somme suivant la valeur d'un champ dans une data.frame Empty Re: Somme suivant la valeur d'un champ dans une data.frame

Message par Nik Dim 20 Oct 2013 - 15:11

Salut,

Je confirme la syntaxe de popotam pour ddply. Si tu as vraiment un gros jeu de données alors avec ddply tu peux aussi utiliser du calcul parallèle assez facilement via les librairies foreach et doParallel.

Nik

Nik

Nombre de messages : 1606
Date d'inscription : 23/05/2008

Revenir en haut Aller en bas

dans - Somme suivant la valeur d'un champ dans une data.frame Empty Re: Somme suivant la valeur d'un champ dans une data.frame

Message par droopy Lun 21 Oct 2013 - 8:04

salut,

dans le cas d'une somme la fonction la plus performante est rowsum :
Code:
microbenchmark(rowsum(tab[,3:4], tab$Numero), aggregate(Releve1~Numero, tab, FUN=sum), ddply(tab, .(Numero), summarize, sum1=sum(Releve1), sum2=sum(Releve2)))
Unit: microseconds
                                                                      expr      min      lq  median      uq      max neval
                                            rowsum(tab[, 3:4], tab$Numero)  330.130  339.110  345.525  354.291  877.495  100
                                aggregate(Releve1 ~ Numero, tab, FUN = sum) 1011.770 1029.945 1051.113 1089.385 1780.648  100
 ddply(tab, .(Numero), summarize, sum1 = sum(Releve1), sum2 = sum(Releve2)) 1649.365 1675.664 1701.109 1748.361 2480.676  100
cdlt
droopy
droopy

Nombre de messages : 1156
Date d'inscription : 04/09/2009

Revenir en haut Aller en bas

dans - Somme suivant la valeur d'un champ dans une data.frame Empty Re: Somme suivant la valeur d'un champ dans une data.frame

Message par Contenu sponsorisé


Contenu sponsorisé


Revenir en haut Aller en bas

Revenir en haut


 
Permission de ce forum:
Vous ne pouvez pas répondre aux sujets dans ce forum