Incompréhension - as.POSIXct ne marche pas toujours

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

Elsa Bussière
Messages : 86
Enregistré le : 30 Mar 2011, 09:34
Contact :

Incompréhension - as.POSIXct ne marche pas toujours

Messagepar Elsa Bussière » 17 Fév 2017, 14:57

Bonjour,

J'ai un problème que mon code ne me donnait pas auparavant. J'ai à priori pas changé le code, ni le dossier source.
J'ai deux lignes dans mon dataframe de 30000 lignes qui ont des valeurs manquantes lors de la transformation de données Date et Heure avec la fonction as.POSIXct. Cela fonctionne pour toutes les lignes, sauf ces deux là. J'ai réussi à les localiser et je suis certaine que l'erreur se crée à la ligne suivante:

I am facing a problem which I never used to have when running this R code. And I really don't think that I changed any of the code or any of the data source. There are two rows in my dataframe (30000 rows), and missing values are generated when I create the column that puts together Date and Time with the as.POSIXct function. It works for all rows, except for those two. I managed to locate those two rows and I am sure that the mistake comes up when I run the following code line:

Code : Tout sélectionner

data$datetime <- as.POSIXct(paste(data$Date, data$Time), format = "%d/%m/%Y %H:%M:%S") # One field for date and time


Voici ce qui se passe pour les deux lignes en question:

Here is what happens for those two lines:

1. Ligne 13129: 30/03/2014 à 02:46:13

Code : Tout sélectionner

### Create a datetime column
> data[13129, c(4:5)]
            Date     Time
13129 30/03/2014 02:46:13

> data$datetime <- as.POSIXct(paste(data$Date, data$Time), format = "%d/%m/%Y %H:%M:%S") # One field for date and time

> data[13129, c(4:5,20)]
            Date     Time datetime
13129 30/03/2014 02:46:13     <NA>


2. ligne 21267: 29/03/2015 à 02:58:54

Code : Tout sélectionner

> data[21267, c(4:5)]
            Date     Time
21267 29/03/2015 02:58:54

> data$datetime <- as.POSIXct(paste(data$Date, data$Time), format = "%d/%m/%Y %H:%M:%S") # One field for date and time

> data[21267, c(4:5,20)]
            Date     Time datetime
21267 29/03/2015 02:58:54     <NA>


3. A présent voici ce qu'il se passe pour quelconque autre ligne du dataframe:

3. Now, this is what happens for any other line of the dataframe:

Code : Tout sélectionner

> data[10000, c(4:5)]
            Date     Time
10000 04/01/2015 09:29:08

> data$datetime <- as.POSIXct(paste(data$Date, data$Time), format = "%d/%m/%Y %H:%M:%S") # One field for date and time

> data[10000, c(4:5,20)]
            Date     Time            datetime
10000 04/01/2015 09:29:08 2015-01-04 09:29:08


Je ne comprends pas pourquoi, les dates ne sont à priori pas 'impossibles'.
J'ai vérifié la classe de tous les éléments:

I don't understand where the problem comes from, the dates and hours are, a priori, possible.
I checked the class and factor levels for everything (see below).


Code : Tout sélectionner

> class(data[13129,4])
[1] "factor"
> class(data[13129,5])
[1] "factor"
> class(data[21267,4])
[1] "factor"
> class(data[21267,5])
[1] "factor"
> class(data[10000,4])
[1] "factor"
> class(data[10000,5])
[1] "factor"


Ils ont chacun le même nombre de niveaux.

Code : Tout sélectionner

> data[13129,4]
[1] 30/03/2014
623 Levels
> data[21267,4]
[1] 29/03/2015
623 Levels
> data[10000,4]
[1] 04/01/2015
623 Levels

> data[13129,5]
[1] 02:46:13
25241 Levels
> data[21267,5]
[1] 02:58:54
25241 Levels
> data[10000,5]
[1] 09:29:08
25241 Levels


Si vous avez une idée, dites moi, Merci!
Elsa
Elsa Bussière

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

Re: Incompréhension - as.POSIXct ne marche pas toujours

Messagepar Serge Rapenne » 17 Fév 2017, 15:29

Bonjour,

À vu de nez, le pb vient justement que les données sont des factor. Est ce que

Code : Tout sélectionner

data$datetime <- as.POSIXct(paste(as.character(data$Date), as.character(data$Time)), format = "%d/%m/%Y %H:%M:%S")
ne fonctionnerait pas mieux

Serge

Elsa Bussière
Messages : 86
Enregistré le : 30 Mar 2011, 09:34
Contact :

Re: Incompréhension - as.POSIXct ne marche pas toujours

Messagepar Elsa Bussière » 17 Fév 2017, 15:35

Bonjour Serge,

Merci pour votre retour rapide.
J'ai essayé avec as.character() et j'ai le même résultat. Cela fonctionne pour toutes lignes sauf les deux mêmes.

I tried with as.character() as you suggested but I get the exact same result.

Code : Tout sélectionner

> data[21267, c(4:5)]
            Date     Time
21267 29/03/2015 02:58:54

> data$datetime <- as.POSIXct(paste(as.character(data$Date), as.character(data$Time)), format = "%d/%m/%Y %H:%M:%S") # One field for date and time

> data[21267, c(4:5,20)]
            Date     Time datetime
21267 29/03/2015 02:58:54     <NA>
Elsa Bussière

Didier Plat
Messages : 225
Enregistré le : 02 Nov 2009, 16:47
Contact :

Re: Incompréhension - as.POSIXct ne marche pas toujours

Messagepar Didier Plat » 17 Fév 2017, 16:43

Bonjour,
Les deux dates ne sont pas converties car il s'agit de dates qui, en France, n'ont pas existé ! Elles correspondent au passage à l'heure d'été respectivement en 2014 et 2015, lorsque les horloges sont passées directement de 2h00 du matin à 3h00 du matin. Le NA est donc logique.
La solution est probablement de remonter à la production de ces données : appareil de mesure n'ayant pas été mis automatiquement à jour, mesures effectuées ailleurs qu'en France...

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

Re: Incompréhension - as.POSIXct ne marche pas toujours

Messagepar Serge Rapenne » 17 Fév 2017, 16:46

Bien vu Didier,

il est aussi possible d'ajouter tz="UTC" dans as.POSIXct

Serge

Elsa Bussière
Messages : 86
Enregistré le : 30 Mar 2011, 09:34
Contact :

Re: Incompréhension - as.POSIXct ne marche pas toujours

Messagepar Elsa Bussière » 17 Fév 2017, 17:06

Oh merci beaucoup, je suis contente d'avoir une explication.
C'est pas difficile de rectifier manuellement mais je n'aime pas laisser ces erreurs au cas où elles en cacheraient de plus grosses!
Les données ont été collectées en Afrique du Sud.
Cordialement,

Elsa
Elsa Bussière

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

Re: Incompréhension - as.POSIXct ne marche pas toujours

Messagepar Serge Rapenne » 18 Fév 2017, 10:05

dans ce cas : tz="Africa/Johannesburg"

Serge

Elsa Bussière
Messages : 86
Enregistré le : 30 Mar 2011, 09:34
Contact :

Re: Incompréhension - as.POSIXct ne marche pas toujours

Messagepar Elsa Bussière » 18 Fév 2017, 16:41

Ca marche, Merci :)
Elsa Bussière


Retourner vers « Questions en cours »

Qui est en ligne

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