Question

Dans la plupart des cas, nous convertissons le temps numérique au format POSIXCT en utilisant R. Cependant, parfois, nous voulons comparer quel point temporel est plus tôt, alors nous préférerions le format de temps numérique. Ainsi, il est assez pratique de convertir le format de temps en numérique. Par exemple, j'ai le format de données comme "2001-03-13 10:31:00",

  begin <- "2001-03-13 10:31:00"

En utilisant R, je veux comprendre comment le découvrir en un temps numérique, par exemple le temps julien, quelque chose comme les secondes qui passent entre 1970-01-01 00:00:00 et 2001-03-13 10:31:00.

Avez-vous des suggestions?


Le calendrier Julian a commencé en 45 avant JC (709 AUC) comme réforme du calendrier romain de Julius Caesar. Il a été choisi après consultation avec l'astronome Sosigènes d'Alexandrie et a probablement été conçu pour approximer l'année tropicale (connue au moins depuis Hipparque). voir http://en.wikipedia.org/wiki/Julian_calendar

Était-ce utile?

La solution

Si vous voulez supprimer ":", "" et "-" d'un vecteur de caractère, cela suffira:

end <- gsub("[: -]", "" , begin, perl=TRUE)
#> end
#[1] "20010313103100"

Vous devriez lire la section à environ 1/4 de la descente en bas? Regex sur Classes de personnages. Étant donné que le "-" est spécial dans ce contexte en tant qu'opérateur de gamme, il doit être placé en premier ou en dernier.

Après votre modification, la réponse est clairement ce que @joran a écrit, sauf que vous auriez d'abord besoin de vous convertir en classe DateTime:

 as.numeric(as.POSIXct(begin))
#[1] 984497460

L'autre point à souligner est que les opérateurs de comparaison fais Travaillez pour la date et les variables classées DateTime afin que la conversion ne soit pas nécessaire du tout. Cela compare «commencer» à une fois une seconde plus tard et les rapports correctement qui commencent sont plus tôt:

as.POSIXct(begin) < as.POSIXct(begin) +1
 #[1] TRUE

Autres conseils

Sur la base de la question révisée, cela devrait faire ce que vous voulez:

begin <- "2001-03-13 10:31:00"
as.numeric(as.POSIXct(begin))

Le résultat est un horodatage UNIX, le nombre de secondes depuis l'époque, en supposant que l'arodatage se trouve dans le fuseau horaire local.

L'exemple de ?as.POSIX l'aide donne

as.POSIXct(strptime(begin, "%Y-%m-%d %H:%M:%S"))

Donc pour toi ce serait

as.numeric(as.POSIXct(strptime(begin, "%Y-%m-%d %H:%M:%S")))

Peut-être que cela pourrait aussi fonctionner:

library(lubridate)
...
df <- '24:00:00'

as.numeric(hms(df))

HMS () convertira vos données d'un format de temps en un autre, cela vous permettra de les convertir en secondes. Voir plein Documentation.

J'ai essayé cela parce que j'avais des problèmes avec les données qui se trouvaient dans ce format mais sur 24 heures.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top