Вы можете попробовать этот итеративный подход. Используйте переменные lower
и upper
для определения исключенного среднего диапазона.
Начните с создания столбца значений NA
. Для каждой итерации l oop все значения NA
в столбце перезаписываются образцами из вашего дистрибутива. Образцы, которые находятся в исключенной зоне, затем перезаписываются NA
, и l oop повторяется до тех пор, пока в столбце не останется значений NA
.
DF <- data.frame(Min = c(10, 20, 40), Max = c(80, 90, 120))
lower <- 5
upper <- 15
DF$sample <- rep(NA, nrow(DF));
while(any(is.na(DF$sample)))
{
i <- which(is.na(DF$sample));
DF$sample[i] <- DF$Min[i] + (DF$Max[i] - DF$Min[i]) * rbeta(length(i), 0.5, 0.5);
DF$sample[DF$sample > lower & DF$sample < upper] <- NA;
}
DF
#> Min Max sample
#> 1 10 80 31.88867
#> 2 20 90 33.26248
#> 3 40 120 80.08321
Создано в 2020- 02-18 представьте пакет (v0.3.0)