Les posteurs les plus actifs de la semaine
Aytan
Somme suivant la valeur d'un champ dans une data.frame Vote_lcapSomme suivant la valeur d'un champ dans une data.frame Voting_barSomme suivant la valeur d'un champ dans une data.frame Vote_rcap 
c@ssoulet
Somme suivant la valeur d'un champ dans une data.frame Vote_lcapSomme suivant la valeur d'un champ dans une data.frame Voting_barSomme suivant la valeur d'un champ dans une data.frame Vote_rcap 
Adddd
Somme suivant la valeur d'un champ dans une data.frame Vote_lcapSomme suivant la valeur d'un champ dans une data.frame Voting_barSomme suivant la valeur d'un champ dans une data.frame Vote_rcap 
Eric Wajnberg
Somme suivant la valeur d'un champ dans une data.frame Vote_lcapSomme suivant la valeur d'un champ dans une data.frame Voting_barSomme suivant la valeur d'un champ dans une data.frame Vote_rcap 
gg
Somme suivant la valeur d'un champ dans une data.frame Vote_lcapSomme suivant la valeur d'un champ dans une data.frame Voting_barSomme suivant la valeur d'un champ dans une data.frame Vote_rcap 


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

Aller en bas

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 le 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

Voir le profil de l'utilisateur

Revenir en haut Aller en bas

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 le 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

Voir le profil de l'utilisateur

Revenir en haut Aller en bas

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 le 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 : 1605
Date d'inscription : 23/05/2008

Voir le profil de l'utilisateur

Revenir en haut Aller en bas

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 le 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 : 1126
Date d'inscription : 04/09/2009

Voir le profil de l'utilisateur

Revenir en haut Aller en bas

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

- Sujets similaires

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