Как вставить случайные, непрерывные промежутки определенной длины и числа в вектор? - PullRequest
0 голосов
/ 07 июня 2018

Мне нужно создать несколько наборов данных с различным, случайным числом и длиной непрерывных пробелов.Я думал о создании вектора с NA для умножения на исходный набор данных.Вот код, который я до сих пор получил для одного набора данных (все моделирование будет выполняться с помощью MonteCarlo):

    For gap definition:

    size1 <- sample(1:40, size=1)
    length <- sample(1:480, size=size1)

    Expressing as different vectors with NA:      

    vec <- list()

    for (i in 1:length(length)){
    vec[[i]] <- seq(1:length[i])
    vec[[i]] <- replace(c(vec[[i]]), values=NA)
    }

Далее мне нужно вставить эти векторы случайным образом, но когерентно и не смежно (с пробелом вхотя бы один) в вектор определенной длины (например, 37000).

   x <- numeric(37000)
   x <- replace(x, 1)

Кто-нибудь знает хороший способ сделать это?Заранее очень много!

1 Ответ

0 голосов
/ 07 июня 2018

Я не уверен, что это лучший способ сделать это, но это вариант:

vector_length <- 37000L
num_gaps <- sample(40L, 1L) # 40 is the max amount of gaps
gap_lengths <- sample(480L, num_gaps) # 480 is the max length of a gap

# initialize
overlaps <- TRUE
gap_ends <- Inf
while (any(overlaps) || any(gap_ends > vector_length)) {
  gap_starts <- sort(sample(vector_length, num_gaps))
  gap_ends <- gap_starts + gap_lengths - 1L
  # make sure the distance between each gap is at least 1
  overlaps <- gap_starts[-1L] - gap_ends[-num_gaps] <= 1L
}

x <- numeric(vector_length)
for (i in seq_along(gap_starts)) {
  x[gap_starts[i]:gap_ends[i]] <- NA_real_
}
...