R语言 生成随机日期

pxyaymoc  于 2023-06-27  发布在  其他
关注(0)|答案(5)|浏览(143)

如何在特定日期范围内生成一组12个随机日期?
我认为以下方法可行:

sample(as.Date(1999/01/01), as.Date(2000/01/01),12)

但结果看起来像是一组随机数字?
谢谢你

kq4fsx7k

kq4fsx7k1#

seq有一个用于类Date的方法,该方法适用于:

sample(seq(as.Date('1999/01/01'), as.Date('2000/01/01'), by="day"), 12)
jbose2ul

jbose2ul2#

几种方式:
1.从一个Date对象开始,然后添加来自sample()的结果
1.从一系列Date对象开始,然后sample()它。
这里是1:

R> set.seed(42)   
R> res <- Sys.Date() + sort(sample(1:10, 3))
R> res
[1] "2014-02-04" "2014-02-10" "2014-02-11"
R>
ifmq2ha2

ifmq2ha23#

为了遵循像rnormrnbinomrunif等基R函数,我创建了下面的函数rdate来返回基于accepted answer of Matthew Lundberg的随机日期。
默认范围是当前年份的第一天和最后一天。

rdate <- function(x,
                  min = paste0(format(Sys.Date(), '%Y'), '-01-01'),
                  max = paste0(format(Sys.Date(), '%Y'), '-12-31'),
                  sort = TRUE) {

  dates <- sample(seq(as.Date(min), as.Date(max), by = "day"), x, replace = TRUE)
  if (sort == TRUE) {
    sort(dates)
  } else {
    dates
  }

}

正如预期的那样,它返回有效日期:

> class(rdate(12))
[1] "Date"

随机检查,从今年开始产生一百万个日期:

> hist(rdate(1000000), breaks = 'months')

eh57zj3b

eh57zj3b4#

td = as.Date('2000/01/01') - as.Date('1999/01/01')
as.Date('1999/01/01') + sample(0:td, 12)
vsnjm48y

vsnjm48y5#

generateRandomDate <- function(start_date, end_date) {
  random_days <- sample(0:(as.numeric(end_date - start_date)), 1)
  start_date + days(random_days)
}

> set.seed(0); sapply(1:12, function(x) generateRandomDate(ymd("2023-01-01"), ymd("2023-1-31")) ) %>% as.Date(origin = "1970-01-01")

[1] "2023-01-14" "2023-01-25" "2023-01-04" "2023-01-07" "2023-01-01" "2023-01-02" "2023-01-29" "2023-01-23" "2023-01-11" "2023-01-14" "2023-01-18" "2023-01-27"

注意as.Date()和origin参数的使用。不知道为什么代码没有它们就不能运行……

相关问题