我正在尝试为每年的预定访问生成预约时间。应该随机选择days=1:365
和第一个约会first=sample(days,1,replace=F)
现在,在第一次约会时,我想在1:365
之间的空间中再生成3个约会,这样在1:365空间中将有4个约会,并且它们之间的间隔相等。
我试过了
point<-sort(c(first-1:5*364/4,first+1:5*364/4 ));point<-point[point>0 & point<365]
但它并不总是给我4个约会。我最终运行了很多次并且仅选择了4个约会的样本,但是我想问一下是否有一种更优雅的方式可以获得恰好距离可能的4个点。
答案 0 :(得分:2)
在第一次约会开始的一年里,我一直在考虑相等的间距(约会之间大约91天)...基本上每年每季度有一次约会。
# Find how many days in a quarter of the year
quarter = floor(365/4)
first = sample(days, 1)
all = c(first, first + (1:3)*quarter)
all[all > 365] = all[all > 365] - 365
all
sort(all)
答案 1 :(得分:0)
这是你要找的吗?
set.seed(1) # for reproducible example ONLY - you need to take this out.
first <- sample(1:365,1)
points <- c(first+(0:3)*(365-first)/4)
points
# [1] 97 164 231 298
另一种方式使用
points <- c(first+(0:3)*(365-first)/3)
这会在[first, 365]
上创建4个点,但最后一个点始终为365.
您的代码产生意外结果的原因是您使用first-1:5*364/4
。这在第一次之前创建了点,其中一些点可以是&lt; 0.然后排除那些points[points>0...]
。