2016-07-01 13 views
-3

Ich versuche, ein Datum in Nanosekunden in R zu konvertieren. Ich habe versucht, Lubridate-Paket, aber nicht erfolgreich.Konvertiere ein Datum in Nanosekunden in R

dateval < - c ("2016.06.29")

Jede Hilfe ist willkommen!

Danke.

+0

Was Sie genau bedeuten verwenden können? Ein Datum ist ein fester Zeitpunkt. Nanosekunden impliziert eine Art Messung zwischen zwei Zeitpunkten, nicht wahr? Willst du seit diesem Datum Nanosekunden? Übrigens ist es für Sie vorzuziehen, Ihren vorherigen Versuch zu zeigen, anstatt nur zu sagen, dass Sie etwas versucht haben. Es ist oft hilfreich für Menschen, die Ihnen helfen wollen. –

+0

Der andere Punkt ist, dass R Systemfunktionen für einige seiner Datetime-Arbeit verwendet und ich kenne keine Systeme, die Datumswerte mit Nanosekunden-Genauigkeit speichern. Millisekunden-Genauigkeit ist in der Regel, was Sie erhalten, da das ist die POSIX-Zeit Genauigkeitsstufe. –

+0

Sie wollen die Menge an Nanosekunden, aber ab wann? Da Sie eine Genauigkeit im Nanosekundenbereich wünschen, sollte das von Ihnen angegebene Datum theoretisch die gleiche Genauigkeit bieten. – thepule

Antwort

-1

Setup:

require(lubridate) 
dateval <- c("2016-06-29") 
dateeval <- ymd(dateval) 

eine Nanosekunde ist eine SI-Einheit der Zeit gleich ein Milliardstel einer Sekunde.

Zeit, die zwischen der Epoche und zu diesem Zeitpunkt in Nanosekunden (ungefähre da kein Zeitstempel mit den Daten gab es):

difftime(dateeval, Sys.time(), units = "secs") 
abs(as.numeric(difftime(ymd("1970-01-01"),dateeval, units = "secs")))*1000000000 
[1] 1.467158e+18 
+0

Dies ist falsch, da ein POSIXct nur etwa 1,1 Mikrosekunden genau ist. Sie können beliebig multiplizieren, aber die letzten vier Ziffern werden mit der Genauigkeit von 53 Bits in einem "double" verworfen. –

+0

@DirkEddelbuettel Es war ziemlich klar in der Antwort, dass dies eine Annäherung ist, da es nicht einmal einen Zeitstempel für das Datum gibt. –

+0

Nicht so. Das [Nanozeit-Paket] (https://github.com/eddelbuettel/nanotime) kann dies tatsächlich beantworten, da es über die POSIX-Auflösung hinausgeht. Mit ihr kann ich 'nanotime (Sys.time()) - nanotime (Sys.Date())' machen, um die richtige (in 'integer64' Auflösung) _und präzise_ Nanosekunden seit Mitternacht zu bekommen. Keine Annäherung hier. In diesem Sinne ist Ihre Antwort falsch, wie ich behaupte, und diese ist trotz Ihrer Ansprüche richtig. (Es gibt einen verbleibenden Fehler aufgrund einer lokalen vs utc-Differenz, die sich ebenfalls einschleicht, aber das ist ein Parametrisierungsproblem, das wir leicht beheben können.) –

0

Verwenden Sie das microbenchmark Paket. Das Paket liefert Benchmarks, wie lange es dauert, etwas mit einer feinen Präzision auszuführen. Im Inneren der Verpackung haben sie eine Funktion, die die aktuelle Zeit in Nanosekunden

microbenchmark::get_nanotime() 
[1] 3.610932e+14 
microbenchmark::get_nanotime() 
[1] 3.610952e+14 
microbenchmark::get_nanotime() 
[1] 3.610958e+14 
microbenchmark::get_nanotime() 
[1] 3.610963e+14 

Alternativ wird zurückkehren, wenn Genauigkeit weniger wichtig wird Sie

as.numeric(as.POSIXct(TIMEA)) - as.numeric(as.POSIXct(TIMEB))

+0

Ich verstehe, dass dies einen Kommentar des OP betrifft, aber es beantwortet nicht die offizielle Frage.Übrigens, was meintest du mit women? –

+0

oh, okay, hab es –

Verwandte Themen