Подтвердить что ты не робот

Создание случайных дат

Как я могу сгенерировать набор из 12 случайных дат в пределах определенного диапазона дат?

Я думал, что следующее будет работать:

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

Но результат выглядит как случайный набор чисел?

Спасибо

4b9b3361

Ответ 1

seq имеет метод для класса Date, который работает для этого:

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

Ответ 2

Несколько способов:

  • Начните с одного объекта Date и просто добавьте результат из sample()

  • Начните с последовательности объектов 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> 

Ответ 3

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

Ответ 4

Чтобы выполнить базовые функции R, такие как rnorm, rnbinom, runif и другие, я создал функцию rdate ниже, чтобы вернуть случайные даты на основе принятого ответа Мэтью Лундберга.

Диапазон по умолчанию - это первый и последний день текущего года.

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')

Гистограмма rdate