[Resolu] Mutate() et Posixlt error

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

[Resolu] Mutate() et Posixlt error

Messagepar Marine Duperat » 08 Aoû 2018, 15:27

Allo,

J'ai -encore- un petit problème, j'ai fait tourner un script qui habituellement tourne bien sur un nouveau jeu de données et R me sort une ligne d'erreur que je n'arrive pas à résoudre

Code : Tout sélectionner

Error in as.POSIXlt.default(x, tz = tz(x)) :
  do not know how to convert 'x' to class “POSIXlt”

Mon jeu de données ressemble à ça :

Code : Tout sélectionner

> head(arbremax)
              date           a1   a2    a3       
1: 2018-07-19 00:00:00.2  49.2  407.1  37.2
2: 2018-07-19 00:00:00.4  49.2  407.7  37.2
3: 2018-07-19 00:00:00.5  49.2  407.2  37.2
4: 2018-07-19 00:00:00.7  49.2  407.8  37.2
5: 2018-07-19 00:00:01.0  49.2  407.1  37.2
6: 2018-07-19 00:00:01.2  49.1  407.2  37.2
> str(arbremax)
Classes ‘data.table’ and 'data.frame':   430150 obs. of  21 variables:
 $ date: POSIXct, format: "2018-07-19 00:00:00.2" "2018-07-19 00:00:00.4" "2018-07-19 00:00:00.5" "2018-07-19 00:00:00.7" ...
 $ a1        : num  49.2 49.2 49.2 49.2 49.2 ...
 $ a2       : num  407 407 407 407 407 ...
 $ a3      : num  37.2 37.2 37.2 37.2 37.2 ...
 - attr(*, ".internal.selfref")=<externalptr>


Et le script que j'essaye d'appliquer ressemble à ça :

Code : Tout sélectionner

arbremax<-
  mutate(year = year(date),
         month = month(date),
         day = day(date),
         hour = hour(date),
         minute = minute(date),
         group3Min = mround(x = minute, base = 3)) %>%

### le message d'erreur vient ici ###

  # Max par 3mn
  group_by(year, month, day, hour, group3Min) %>%
  summarise(a1.max= max(a1))


Ce que je veux c'est calculer le maximum de mes colonnes par groupe de 3 minutes.
J'ai vérifié le format de date dans la table qui fonctionne avec de script et je suis exactement pareil, donc je ne comprends pas pourquoi dans ce cas-ci ça ne marche pas.
J'ai essayé de passer ma date en posixlt, en posixct, je suis passée par as.POSIXlt() , as.POSIXct(), as_datetime() etc mais rien à faire ..

J'ai pas mal regardé sur internet et sur ce forum - notamment cette discussion qui est proche de ce que je veux faire - mais je n'ai pas réussi à résoudre mon problème :(
http://forums.cirad.fr/logiciel-R/viewtopic.php?f=3&t=9219&p=42449&hilit=mutate+error#p42449

Si vous avez besoin d'infos supplémentaires n'hesitez pas.
J'avais essayé en premier lieu avec la même table mais en format long avec les colonnes "date", "Arbre" = c(a1,a2,a3) , "Tm" = c(49.2, ..) mais bien entendu ça ne marchait pas non plus.
Marine.

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

Re: Mutate() et Posixlt error

Messagepar Pierre-Yves Berrard » 08 Aoû 2018, 18:40

De quel package provient la fonction mround ?
PY

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

Re: Mutate() et Posixlt error

Messagepar Marine Duperat » 08 Aoû 2018, 19:48

Oh pardon j'ai oublié cette partie.
C'est une fonction qu'un ami à moi m'a aidé à rédiger pour mon précédent script, pour pouvoir "grouper" mes données aux 3 minutes.

Code : Tout sélectionner

mround <-
  function(x,base){
    base*ceiling(x/base)
  }
Marine.

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

Re: Mutate() et Posixlt error

Messagepar Pierre-Yves Berrard » 08 Aoû 2018, 20:18

Et les autres fonctions (year, ...). lubridate ?
Quelle ligne fait planter mutate ?
PY

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

Re: Mutate() et Posixlt error

Messagepar Marine Duperat » 08 Aoû 2018, 20:31

J'ai indiqué où arrivait le message d'erreur.

Code : Tout sélectionner

 mutate(year = year(date),
         month = month(date),
         day = day(date),
         hour = hour(date),
         minute = minute(date),
         group3Min = mround(x = minute, base = 3))


C'est aprés ce groupe de commandes. Mais j'ai testé individuellement et ça commence après la première ligne.
Je pense que R a un probleme avec ma date qui est de ce type "yyyy-mm-aa hh:mm:ss.0" mais je ne comprends pas pourquoi parce que j'ai deja fait tourner ces commandes sur le meme type de dates

Pour les packages : lubridate, dplyr, pas mal tout ce qui est dans le tidyverse
Marine.

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

Re: Mutate() et Posixlt error

Messagepar Pierre-Yves Berrard » 09 Aoû 2018, 07:42

Un extrait des données serait utile pour reproduire le bug, par exemple en collant ici le résultat de :

Code : Tout sélectionner

dput(head(arbre_max))
PY

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

Re: Mutate() et Posixlt error

Messagepar Marine Duperat » 09 Aoû 2018, 13:55

Code : Tout sélectionner

> dput(head(arbremax))
structure(list(TIMESTAMP = structure(c(1531958400.2, 1531958400.4,
1531958400.6, 1531958400.8, 1531958401, 1531958401.2), class = c("POSIXct",
"POSIXt"), tzone = "UTC"), `1` = c(49.163483091668, 49.1927832741759,
49.1870333101957, 49.179875801785, 49.177393762785, 49.1926002271165
), `10` = c(407.199341229966, 407.171245121608, 407.175799584359,
407.186503017518, 407.165150871328, 407.195552180768), `10B` = c(37.1676662458448,
37.1676662458448, 37.1676662458448, 37.1676662458448, 37.1676662458448,
37.1676662458448), `11` = c(141.500753212666, 141.492116487753,
141.515540006934, 141.500199399025, 141.537773513052, 141.504077226552
), `12` = c(61.7456553642747, 61.7379983151531, 61.7632428251834,
61.7540783135914, 61.7757232111706, 61.7557340593201), `13` = c(81.3989529151214,
81.4604009790008, 81.4525174263622, 81.4327336851916, 81.4564782264238,
81.4396578763945), `14` = c(36.0521315084423, 36.0734432582969,
36.0421276632013, 36.0177496398484, 36.0100652113328, 36.0113685331261
), `15` = c(62.6105359858443, 62.6095015734666, 62.5721375834621,
62.5711386895725, 62.6017634515273, 62.6038887930657), `15B` = c(37.9830453278449,
37.9986287144493, 37.9992854916835, 38.0103623876945, 37.9909877901365,
37.9980554513757), `2` = c(29.803518304592, 29.8279340557318,
29.7919415501834, 29.8140238709509, 29.7282276371306, 29.7955098439494
), `3` = c(6.06539016212618, 6.06847381142903, 6.06567249151749,
6.05868104941133, 6.06652330376609, 6.06121905309361), `4` = c(38.7465157565895,
38.7401751483803, 38.7897916668102, 38.7148336186826, 38.7608835929833,
38.7729075968376), `4B` = c(21.2399760307136, 20.8220590586012,
21.2399760307136, 21.2399760307136, 21.2399760307136, 20.8220590586012
), `5` = c(35.1169575467547, 35.0795966966704, 35.1602233217282,
35.1297132884552, 35.1285728686905, 35.1552332762852), `5B` = c(48.4237468504839,
48.4237468504839, 48.4237468504839, 48.4237468504839, 48.4237468504839,
48.4237468504839), `6` = c(69.0645269720513, 69.1077071267345,
69.1121524797946, 69.1758395800357, 69.0808460222636, 69.1016407625601
), `7` = c(3.80542165454162, 3.82776161076089, 3.84030856393192,
3.82172501869354, 3.81749606681333, 3.83121228298716), `8` = c(62.1382993805069,
62.1022474933998, 62.1229622598551, 62.0614657863, 62.1156689973545,
62.1211710424601), `9` = c(64.5041438304585, 64.502435954593,
64.4750679112045, 64.5127872247028, 64.5533910889204, 64.5166488542271
), `9B` = c(87.6622256257305, 87.6622256257305, 87.6622256257305,
87.6622256257305, 87.6622256257305, 87.6622256257305)), .Names = c("TIMESTAMP",
"1", "10", "10B", "11", "12", "13", "14", "15", "15B", "2", "3",
"4", "4B", "5", "5B", "6", "7", "8", "9", "9B"), row.names = c(NA,
6L), class = "data.frame")
Marine.

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

Re: Mutate() et Posixlt error

Messagepar Pierre-Yves Berrard » 09 Aoû 2018, 14:51

La variable temporelle s'appelle TIMESTAMP, pas date.
PY

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

Re: Mutate() et Posixlt error

Messagepar Marine Duperat » 09 Aoû 2018, 15:14

Oui j'ai mélangé l'ancien script avec le nouveau j'utilise bien le meme nom dans ma commande que le nom de ma colonne, ce n'est pas ça le soucis, j'ai juste oublié de le changer en le publiant ici. Pareil pour les colonnes a1,a2,a3, dans mon script actuel elles vont de 1 à 15 (et parfois 4B, 5B, etc).
Marine.

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

Re: Mutate() et Posixlt error

Messagepar Pierre-Yves Berrard » 09 Aoû 2018, 15:21

Il y a aussi une erreur de syntaxe ici (il manque le nom de la table en argument de mutate) :
arbremax<-
arbremax %>%
mutate(
year = year(date),
month = month(date),
day = day(date),
hour = hour(date),
minute = minute(date),
group3Min = mround(x = minute, base = 3))


Quand je corrige ça et que je remplace date par TIMESTAMP, ça fonctionne chez moi.
PY

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

Re: Mutate() et Posixlt error

Messagepar Marine Duperat » 09 Aoû 2018, 15:26

Oh mon dieu, c'est ça ! A force de bidouiller dedans j'ai du supprimer l'argument sans m'en rendre compte.
MERCI ! Tout fonctionne super bien :)

Sincèrement merci d'avoir pris le temps de m'aider, c'est vraiment niaiseux mais ça fait 2 jours que je bloque la dessus. A force de regarder mon script je commence à ne plus rien voir. Merci merci merci !
Marine.

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

Re: Mutate() et Posixlt error

Messagepar Pierre-Yves Berrard » 09 Aoû 2018, 15:31

J'aurais aussi souhaité voir cette erreur plus vite...
PY


Retourner vers « Questions en cours »

Qui est en ligne

Utilisateurs parcourant ce forum : François Bonnot et 1 invité