Frage

In den meisten Fällen konvertieren wir die numerische Zeit mit R in das Posixct-Format. Manchmal möchten wir jedoch vergleichen, welcher Zeitpunkt früher liegt, dann würden wir das numerische Zeitformat bevorzugen.Daher ist es eine sehr praktische Frage, das Zeitformat in ein numerisches Format umzuwandeln.Zum Beispiel habe ich das Datenformat wie "2001-03-13 10:31:00",

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

Mit R möchte ich herausfinden, wie man es in eine Zahl umwandelt, z.die julianische Zeit, so etwas wie die Sekunden zwischen 1970-01-01 00:00:00 und 2001-03-13 10:31:00.

Haben Sie Vorschläge?


Der julianische Kalender begann 45 v. Chr. (709 AUC) als Reform des römischen Kalenders durch Julius Cäsar.Es wurde nach Rücksprache mit dem Astronomen Sosigenes von Alexandria ausgewählt und war wahrscheinlich so konzipiert, dass es sich dem tropischen Jahr annähert (zumindest seit Hipparchus bekannt).Siehe http://en.wikipedia.org/wiki/Julian_calendar

War es hilfreich?

Lösung

Wenn Sie nur ":", "" und "-" aus einem Zeichenvektor entfernen möchten, reicht dies aus:

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

Sie sollten den Abschnitt über Zeichenklassen ungefähr 1/4 des Weges in Regex lesen.Da das "-" in diesem Zusammenhang als Bereichsoperator etwas Besonderes ist, muss es an erster oder letzter Stelle stehen.

Nach Ihrer Bearbeitung lautet die Antwort eindeutig, was @joran geschrieben hat, außer dass Sie zuerst in eine DateTime-Klasse konvertieren müssen:

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

Der andere Punkt ist, dass Vergleichsoperatoren do für Variablen der Klassen Date und DateTime arbeiten, sodass die Konvertierung möglicherweise überhaupt nicht erforderlich ist.Dies vergleicht "Beginn" mit einer Zeit eine Sekunde später und meldet korrekt, dass der Beginn früher ist:

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

Andere Tipps

Basierend auf der überarbeiteten Frage sollte dies tun, was Sie wollen:

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

Das Ergebnis ist ein Unix-Zeitstempel, die Anzahl der Sekunden seit der Epoche, vorausgesetzt, der Zeitstempel befindet sich in der lokalen Zeitzone.

Das Beispiel aus der ?as.POSIX-Hilfe gibt

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

also für dich wäre es

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

Vielleicht könnte das auch funktionieren:

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

as.numeric(hms(df))

hms () konvertiert Ihre Daten von einem Zeitformat in ein anderes. Auf diese Weise können Sie sie in Sekunden konvertieren.Siehe die vollständige Dokumentation .

Ich habe es versucht, weil ich Probleme mit Daten hatte, die in diesem Format waren, aber über 24 Stunden.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top