gpt4 book ai didi

r - 根据条件过滤向量

转载 作者:行者123 更新时间:2023-12-04 12:12:05 24 4
gpt4 key购买 nike

我正在尝试过滤整数向量。
我的条件是 2 个连续元素之间的距离至少应为 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

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

然后,来自 128 ,重复同样的过程。
结果应该是:
24 128 228 356 532 634 839 997

我设法创建了一个快速而肮脏的循环来给出正确的结果,但我可以猜测它对于非常大的向量来说效率不高......
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]
}
}

result <- result[result != 0]

获得预期结果的有效方法是什么?可以使用矢量化来完成吗?

最佳答案

unique(Reduce(function(x,y)ifelse(y-x>=100,y,x),input,accumulate = T))
[1] 24 128 228 356 532 634 839 997

关于r - 根据条件过滤向量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56499239/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com