[Résolu] mutate() avec multiples conditions

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

Marine Duperat
Messages : 25
Enregistré le : 14 Avr 2016, 07:54

[Résolu] mutate() avec multiples conditions

Messagepar Marine Duperat » 07 Aoû 2018, 18:48

Bonjour,

Je vais essayer d'expliquer clairement mon problème, si jamais je ne suis pas claire n'hésitez pas à me le faire remarquer ;)

Mes (nombreuses) données ressemblent à ça :

Code : Tout sélectionner

head(arbre)
# A tibble: 6 x 4
  TIMESTAMP             Arbre Jauge    Tm
  <dttm>                <chr> <chr>   <dbl>
1 2018-07-19 00:00:00.2    1    N      6.90
2 2018-07-19 00:00:00.4    1    N      5.48
3 2018-07-19 00:00:00.5    1    N      6.90
4 2018-07-19 00:00:00.7    1    N      6.90
5 2018-07-19 00:00:01.0    1    N      6.90
6 2018-07-19 00:00:01.2    1    N      5.48


Le Timestamp s'etend sur 1 journée avec une donnée au 0.2 sec x 15 arbres x 2 jauges (une positionnée Nord et une positionnée Est).
Les valeurs qu'ils m'intéressent de transformer sont les Tm (pour Turning Moment).

Je souhaiterais obtenir une colonne Tm.all qui me donne le Tm par 0.2sec pour chaque arbre en réunissant les données de Tm des jauges E et N.
En gros il faut que je calcule cette formule pour chaque arbre à chaque 0.2 seconde :

Tm.all = sqrt ( N^2 + E^2 )

Mais je ne sais pas comment inclure autant de critère en indiquant que les valeurs à transformer sont dans la colonne Tm ...
Si vous aviez une idée ...
Peut etre que mes données sont mal organisées ? Ça serait peut etre plus simple si j'avais des colonnes N.Tm et E.Tm plutôt que des colonnes Jauge et Tm¸

J'ai essayé avec les fonctions group_by() et mutate() mais sans trop de succés pour l'instant, je ne sais pas trop comment coder cette demande.

J'espère que je ne vous ai pas trop perdu, j'ai vraiment du mal à savoir comment expliquer ça - ..
Marine
Marine.

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

Re: mutate() avec multiples conditions

Messagepar Pierre-Yves Berrard » 07 Aoû 2018, 19:15

Bonjour,

Marine Duperat a écrit :Peut etre que mes données sont mal organisées ? Ça serait peut etre plus simple si j'avais des colonnes N.Tm et E.Tm plutôt que des colonnes Jauge et Tm

Votre idée est la bonne. Cela peut se faire avec la fonction spread du package tidyr.

Code : Tout sélectionner

spread(arbre, Jauge, Tm)

ou

Code : Tout sélectionner

arbre %>% spread(Jauge, Tm)
puisque vous utilisez dplyr.
PY

Marine Duperat
Messages : 25
Enregistré le : 14 Avr 2016, 07:54

Re: mutate() avec multiples conditions

Messagepar Marine Duperat » 07 Aoû 2018, 19:31

Oh super ! Ça marche parfaitement alors que ça fait 2H que j’essaye de séparer mes colonnes sans succès !
Je débute avec dplyr (et R), je ne connaissais pas cette fonction.

Merci beaucoup, ça va me permettre d'avancer et d'essayer de faire ce satané calcul. :)
Vous êtes super efficace.
Marine.

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

Re: mutate() avec multiples conditions

Messagepar Pierre-Yves Berrard » 07 Aoû 2018, 19:57

Le passage des données du format long au format large (et inversement) est une question qui revient souvent ici.

À noter l'existence de la fonction gather (large -> long), qui est la réciproque de spread (long -> large) :

Code : Tout sélectionner

arbre %>% spread(Jauge, Tm) %>% gather(Jauge, Tm, N, E)
retombe sur la table de départ.

Pour le "satané calcul", il faudra cette fois-ci utiliser mutate. ;-)
PY

Marine Duperat
Messages : 25
Enregistré le : 14 Avr 2016, 07:54

Re: mutate() avec multiples conditions

Messagepar Marine Duperat » 07 Aoû 2018, 20:01

hahaha oui j'avais utilisé gather() pour mettre en format long, je ne connais pas encore l'inverse ;)
Pour mutate() oui c'est ce que je suis en train d'utiliser.

Merci beaucoup pour ton aide !
Marine.


Retourner vers « Questions en cours »

Qui est en ligne

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