R 两个连续值之间差异最小的样本

R 两个连续值之间差异最小的样本,r,sampling,R,Sampling,我想对值进行采样,但有一个约束要求两个值至少相隔window。这类似于一年中的采样日,但将窗口设置为至少间隔两周。到目前为止,我已经这样试过了 check.diff <- TRUE window <- 14 while (check.diff == TRUE) { sampled.session <- sort(sample(1:365, size = 5, replace = FALSE)) check.diff <- any(diff(sampled.

我想对值进行采样,但有一个约束要求两个值至少相隔
window
。这类似于一年中的采样日,但将
窗口设置为至少间隔两周。到目前为止,我已经这样试过了

check.diff <- TRUE
window <- 14
while (check.diff == TRUE) {
    sampled.session <- sort(sample(1:365, size = 5, replace = FALSE))
    check.diff <- any(diff(sampled.session) < window)
}

那么,像这样的东西怎么样

window <- 14
sample_pair <- sample(1:365, size=2)
sample_pair[2] <- sample_pair[2] + window*(diff(foo)<window)

window一种方法是从抽样人群中删除候选人:

set.seed(42)

population <- 1:356
n_samples <- 5
window <- 14

sampled_session <- rep(sample(population, 1), n_samples) # initialize the vector

for (i in seq.int(2, n_samples)) {
    borders <- sampled_session[i - 1] + (window - 1) * c(-1, 1)
    days_in_window <- seq.int(borders[1], borders[2])
    population <- setdiff(population, days_in_window)
    sampled_session[i] <- sample(population, 1) 
}

sort(sampled_session)
# [1]  90 193 264 309 326

diff(sort(sampled_session))
# [1] 103  71  45  17
set.seed(42)

人口不
zoo
有一些冷静的方法来处理这个问题?@AriB.Friedman这是我最初的想法(因此我提到了采样天数),但结果是空的。有趣。我看到了与图论的联系,以及在无向图中找到一个团(一个完整的子图)的问题。请随意扩展您的评论,并将其作为可能的答案。如果你能展示一些代码,那就更好了!好主意。如果没有人有更好的想法,我将使用这个实现。我希望您不介意我将我的解释添加到您的文章中,以供后代使用。
set.seed(42)

population <- 1:356
n_samples <- 5
window <- 14

sampled_session <- rep(sample(population, 1), n_samples) # initialize the vector

for (i in seq.int(2, n_samples)) {
    borders <- sampled_session[i - 1] + (window - 1) * c(-1, 1)
    days_in_window <- seq.int(borders[1], borders[2])
    population <- setdiff(population, days_in_window)
    sampled_session[i] <- sample(population, 1) 
}

sort(sampled_session)
# [1]  90 193 264 309 326

diff(sort(sampled_session))
# [1] 103  71  45  17
set.seed(357)
population <- 1:357
n_samples <- 5
window <- 14

sampled.session <- numeric(n_samples) 
for (i in seq_len(n_samples)) {
    sampled.session[i] <- pick <- sample(population, 1)
    population <- population[-which(population < pick + window & population > pick - window)]
}
sort(sampled.session)
[1]  19  39 111 134 267