我已經寫了(相當幼稚)函數來隨機地選擇兩個規定的天有效地產生兩個日期
# 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=""))
}
這導致之間的日期/時間之間的時間和日期的隨機樣本:
> 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"
但是隨着樣本量的增加,這似乎顯着減慢。
# 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
是否有人能夠建議如何以更有效的方式做這樣的事情?
乾杯 - 作品一種享受,而且速度很快。 – thelatemail
使用日期和時間的第一條規則:* always *請記住'POSIXct'實際上只是一個數字,自從點以來有小數秒。 Dito提供'日期'和分數日。很多問題變得很容易。 –
這個答案的天才是'st + ev'技巧 - 這是'POSIXct'的往返過程,這很痛苦,因爲你需要明確指定原點。否則'runif(N,as.POSIXct(st),as.POSIXct(et))'會讓你獲得90%的分數。但是你需要'as.POSIXct(...,origin =「1970-01-01」)' – user295691