r - 在向量中生成随机长度的 NA 随机序列

标签 r vector random missing-data seq

我想在向量中生成缺失值,以便将缺失值按顺序分组,以模拟不同长度的缺失数据周期。

假设我有一个包含 10 000 个值的向量,我想在向量中的随机位置生成 12 个 NA 序列,每个序列具有随机长度 L介于 1 和 144 之间(144 在时间步长 10 分钟模拟 2 天的缺失值)。序列必须 不重叠 .

我怎样才能做到这一点?谢谢。

我试过结合 lapplyseq没有成功。

具有 3 个不同序列的预期输出示例:

# 1 2 3 5 2 NA NA 5 4 6 8 9 10 11 NA NA NA NA NA NA 5 2 NA NA NA...

编辑

我正在处理季节性时间序列,因此 NA 必须覆盖值和 不能插入作为新元素。

最佳答案

如果每个 NA 序列的起始位置和运行长度都应该是随机的,我认为您不能确定立即找到合适的解决方案,因为您的约束是序列不能重叠。

因此,我提出了以下解决方案,该解决方案尝试了有限的次数 ( max_iter ) 以找到起始位置和 NA 游程长度的合适组合。如果找到,则返回,如果在定义的最大迭代次数内没有找到,您只会收到一条通知。

x = 1:1000
n = 3
m = 1:144

f <- function(x, n, m, max_iter = 100) {
  i = 0
  repeat {
    i = i+1
    idx <- sort(sample(seq_along(x), n))        # starting positions
    dist <- diff(c(idx, length(x)))             # check distance inbetween 
    na_len <- sample(m, n, replace = TRUE) - 1L # lengths of NA-runs
    ok <- all(na_len < dist)                    # check overlap
    if(ok | i == max_iter) break 
  }

  if(ok) {
    replace(x, unlist(Map(":", idx, idx+na_len)), NA)
  } else {
      cat("no solution found in", max_iter, "iterations")
    }
}

f(x, n, m, max_iter = 20)

当然你可以很容易地增加迭代次数,你应该注意更大的n找到解决方案变得越来越困难(需要更多的迭代)。

关于r - 在向量中生成随机长度的 NA 随机序列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44590380/

相关文章:

python - 如何组合一维数组来创建一个新数组

java - android quiz 单选按钮不显示正确的值

Haskell `randoms` 函数在我的库中表现不佳

r - R,右xpath使用xpathSApply抓取文本

r - R Shiny :删除ggplot2背景以使其透明

r - 选择向量中除 dplyr 管道中的一个元素之外的所有元素

c++ - 创建 vector 的问题

c# - 要显示在文本框上的随机数生成器

r - 使用列表中的函数及其参数

r - 从数据框中选择每行的前 N ​​列值