extraction de valeurs dans un data-frame

Postez ici vos questions, réponses, commentaires ou suggestions - Les sujets seront ultérieurement répartis dans les archives par les modérateurs

Modérateur : Groupe des modérateurs

Stephan Defoy
Messages : 59
Enregistré le : 19 Déc 2019, 14:07

extraction de valeurs dans un data-frame

Messagepar Stephan Defoy » 07 Jan 2020, 10:45

Bonjour,

J'ai un data-frame comme par exemple :
heure x
1 00 6728
2 01 10777
3 02 10801
4 03 8926
5 04 10463
6 05 10442

La première colonne représente les heures, je voulais savoir s'il existait un moyen pour récupérer toutes les valeurs correspondants aux heures paires et en faire la somme.
Je n'arrive déjà pas à récupérer une valeur pour une heure donnée, j'ai essayé les fonction apply, subset, which, sans succès ....

Merci d'avance pour votre aide,

Stéphan,

Pierre-Yves Berrard
Messages : 1029
Enregistré le : 12 Jan 2016, 23:30

Re: extraction de valeurs dans un data-frame

Messagepar Pierre-Yves Berrard » 07 Jan 2020, 10:58

Bonjour,

Code : Tout sélectionner

sum(donnees$x[as.integer(donnees$heure) %% 2 == 0])

J'ai supposé que l'heure était sous forme caractère (d'où l'utilisation de as.integer).
PY

François Bonnot
Messages : 537
Enregistré le : 10 Nov 2004, 15:19
Contact :

Re: extraction de valeurs dans un data-frame

Messagepar François Bonnot » 07 Jan 2020, 14:13

J'ai supposé que l'heure était sous forme caractère (d'où l'utilisation de as.integer)

C'est pour ça qu'il est vraiment préférable d'utiliser dput() pour communiquer un jeu de données (même petit), parce qu'on récupère ainsi l'objet R complet au lieu de recréer un autre objet qui peut différer de celui d'origine.
http://forums.cirad.fr/logiciel-R/viewtopic.php?f=1&t=3302
François

Serge Rapenne
Messages : 1426
Enregistré le : 20 Aoû 2007, 15:17
Contact :

Re: extraction de valeurs dans un data-frame

Messagepar Serge Rapenne » 07 Jan 2020, 15:46

Bonjour,

j'aurais fait comme Pierre-Yves, mais voici une autre solution possible (j'appelle dta le jeu de données) :

Code : Tout sélectionner

library(dplyr)
dta %>% filter(heure %in% sprintf("%02d",seq(0,24,by=2))) %>% summarise(somme=sum(x))

j'ouvre par la même un concours d'offuscation :-) qui fera pire ?

Serge

Pierre-Yves Berrard
Messages : 1029
Enregistré le : 12 Jan 2016, 23:30

Re: extraction de valeurs dans un data-frame

Messagepar Pierre-Yves Berrard » 07 Jan 2020, 17:55

Serge Rapenne a écrit :j'ouvre par la même un concours d'offuscation :-) qui fera pire ?

Un essai :

Code : Tout sélectionner

sum(donnees$x[!as.logical(bitwAnd(as.integer(donnees$heure), 1))])
PY

François Bonnot
Messages : 537
Enregistré le : 10 Nov 2004, 15:19
Contact :

Re: extraction de valeurs dans un data-frame

Messagepar François Bonnot » 08 Jan 2020, 07:59

j'ouvre par la même un concours d'offuscation :-) qui fera pire ?

Je propose :

Code : Tout sélectionner

sum((cos(dta$heure*pi)+1)*dta$x)/2
François

Serge Rapenne
Messages : 1426
Enregistré le : 20 Aoû 2007, 15:17
Contact :

Re: extraction de valeurs dans un data-frame

Messagepar Serge Rapenne » 08 Jan 2020, 08:18

Ok, ok, ok après tout, ma proposition n'était pas si mal. l'imagination torturé des contributeurs semble sans limite

Serge

Stephan Defoy
Messages : 59
Enregistré le : 19 Déc 2019, 14:07

Re: extraction de valeurs dans un data-frame

Messagepar Stephan Defoy » 09 Jan 2020, 09:32

En tout cas, merci bien pour toutes vos contributions !
Je pense opter pour la solution la plus simple ...
J'ai bien noté la méthode préconisée pour mettre les données.

Bonne journée à tous !

Stephan Defoy
Messages : 59
Enregistré le : 19 Déc 2019, 14:07

Re: extraction de valeurs dans un data-frame

Messagepar Stephan Defoy » 09 Jan 2020, 10:32

Je suis désolé, j'aurais dû vous poser tout de suite ma problématique réelle, je galère au step suivant. Je souhaiterais en fait la somme des heures tri-horaires, 00, 03 , 06 etc ...
Je pensais que ce serait simple mais je me vois obligé d'utiliser la notation c(1, 4, 7 .....), je trouve ça un peu lourd, d'autant qu'il faut que je le répète à plusieurs reprises dans mon programme.
Si vous avez une meilleur idée ...

Stephan Defoy
Messages : 59
Enregistré le : 19 Déc 2019, 14:07

Re: extraction de valeurs dans un data-frame

Messagepar Stephan Defoy » 09 Jan 2020, 10:41

J'ai oublié de vous dire, je n'ai pas accès à la librairie dplyr ....

Pierre-Yves Berrard
Messages : 1029
Enregistré le : 12 Jan 2016, 23:30

Re: extraction de valeurs dans un data-frame

Messagepar Pierre-Yves Berrard » 09 Jan 2020, 10:42

Il suffit de modifier la condition avec le modulo :

Code : Tout sélectionner

sum(donnees$x[as.integer(donnees$heure) %% 3 == 1])

PS : pour avoir dplyr : install.packages("dplyr"), mais l'instruction ci-dessus ne le nécessite pas
PY

Stephan Defoy
Messages : 59
Enregistré le : 19 Déc 2019, 14:07

Re: extraction de valeurs dans un data-frame

Messagepar Stephan Defoy » 09 Jan 2020, 10:45

ma concaténation ne fonctionne pas, je viens de m'en apercevoir...

Stephan Defoy
Messages : 59
Enregistré le : 19 Déc 2019, 14:07

Re: extraction de valeurs dans un data-frame

Messagepar Stephan Defoy » 09 Jan 2020, 11:40

Ok, merci bcp, je n'avais pas bien compris la logique, désolé !

Stephan Defoy
Messages : 59
Enregistré le : 19 Déc 2019, 14:07

Re: extraction de valeurs dans un data-frame

Messagepar Stephan Defoy » 09 Jan 2020, 17:21

Petit correctif, en fait il faut mettre un "/" entre les 2 "%" pour avoir la division entière, soit
b$x[as.integer(b$heure) %/% 3 == 1] si b est le vecteur de base.

Stephan Defoy
Messages : 59
Enregistré le : 19 Déc 2019, 14:07

Re: extraction de valeurs dans un data-frame

Messagepar Stephan Defoy » 09 Jan 2020, 18:16

Déd=cidément, ça marche avec %% mais il faut que le reste soit égale à 0, donc il faut faire
b$x[as.integer(b$heure) %% 3 == 0]
Ce sera mon dernier mot, pour ce soir, je pense ....


Retourner vers « Questions en cours »

Qui est en ligne

Utilisateurs parcourant ce forum : Google [Bot] et 1 invité