effizient generieren einer zufälligen Stichprobe von Zeit und Datum zwischen zwei Daten
Ich geschrieben habe, ein (ziemlich naiv) - Funktion, um nach dem Zufallsprinzip wählen Sie ein Datum/Zeit zwischen zwei festgelegten Tagen
# set start and end dates to sample between
day.start <- "2012/01/01"
day.end <- "2012/12/31"
# define a random date/time selection function
rand.day.time <- function(day.start,day.end,size) {
dayseq <- seq.Date(as.Date(day.start),as.Date(day.end),by="day")
dayselect <- sample(dayseq,size,replace=TRUE)
hourselect <- sample(1:24,size,replace=TRUE)
minselect <- sample(0:59,size,replace=TRUE)
as.POSIXlt(paste(dayselect, hourselect,":",minselect,sep="") )
}
Sind die Ergebnisse in:
> rand.day.time(day.start,day.end,size=3)
[1] "2012-02-07 21:42:00" "2012-09-02 07:27:00" "2012-06-15 01:13:00"
Aber das scheint zu verlangsamen erheblich die Größe der Stichprobe steigt.
# some benchmarking
> system.time(rand.day.time(day.start,day.end,size=100000))
user system elapsed
4.68 0.03 4.70
> system.time(rand.day.time(day.start,day.end,size=200000))
user system elapsed
9.42 0.06 9.49
Ist jemand in der Lage zu zeigen, wie etwas zu tun, wie dies in einer effizienteren Weise?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ahh, ein anderes Datum/Zeit-problem reduzieren zu können, um die Arbeit in schwimmt 🙂
Versuchen, diese Funktion
Berechnen wir die
difftime
in Sekunden, und dann "nur" zeichnen Uniformen über Sie, Sortieren Sie das Ergebnis. Hinzufügen, dass zu den start-und Sie sind fertig:POSIXct
ist wirklich nur eine numerische mit Bruchteilen von Sekunden, da theepoch. Dito fürDate
und Bruchteilen von Tagen. Eine Menge Probleme werden viel einfacher.st + ev
trick-es ist die hin-und Rückfahrkarte zu einemPOSIXct
dass ist schmerzhaft, da Sie explizit angeben müssen, die Herkunft. Ansonstenrunif(N, as.POSIXct(st), as.POSIXct(et))
bekommt man 90%; aber dann müssen Sieas.POSIXct(..., origin="1970-01-01")
sort
Befehl beim erzeugen einer Sequenz zufälliger Werte?Etwas wie dies funktionieren wird, auch. Sorry für die random-Daten-frame, ich warf gerade, dass in es so Sie konnte sehen, Zeichnung.