小编i94*_*xoe的帖子

根据条件过滤向量

我正在尝试过滤整数向量。
我的条件是连续两个元素之间的距离至少应为100;如果不是,请删除该元素,然后查看下一个候选元素。
这是一个例子:

set.seed(42)
input <- sort(sample(1:1000, 20))
head(input, 20)


[1] 24  49  74 128 146 153 165 228 303 321 356 410 532 561 601 622 634 839 882 997
Run Code Online (Sandbox Code Playgroud)

如果我从第一个元素开始24,我想保持与第一个元素的距离至少为100。
在这种情况下,它将为128

然后,从128重复相同的过程。
结果应为:

24 128 228 356 532 634 839 997
Run Code Online (Sandbox Code Playgroud)

我设法创建了一个快速且肮脏的循环,可以给出正确的结果,但是我可以猜到,对于非常大的向量来说,效率不是很高。

result <- integer(length(input))
result[1] <- input[1]
for(i in seq_along(input)[-1]) {
  if(is.na(input[2])) break

  if(input[2] - input[1] < 100) {
    input <- input[-2]
  } else {
    result[i] <- input[2]
    input <- input[-1] …
Run Code Online (Sandbox Code Playgroud)

r vector filter

8
推荐指数
1
解决办法
113
查看次数

标签 统计

filter ×1

r ×1

vector ×1