Ответ 1
seq
имеет метод для класса Date
, который работает для этого:
sample(seq(as.Date('1999/01/01'), as.Date('2000/01/01'), by="day"), 12)
Как я могу сгенерировать набор из 12 случайных дат в пределах определенного диапазона дат?
Я думал, что следующее будет работать:
sample(as.Date(1999/01/01), as.Date(2000/01/01),12)
Но результат выглядит как случайный набор чисел?
Спасибо
seq
имеет метод для класса Date
, который работает для этого:
sample(seq(as.Date('1999/01/01'), as.Date('2000/01/01'), by="day"), 12)
Несколько способов:
Начните с одного объекта 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>
td = as.Date('2000/01/01') - as.Date('1999/01/01')
as.Date('1999/01/01') + sample(0:td, 12)
Чтобы выполнить базовые функции 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')