r - 根据条件过滤向量
问题描述
我正在尝试过滤整数向量。
我的条件是 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
推荐阅读
- c - Memset struct 变量分别与 memset 整个结构,哪个更快?
- sql - 加入 2 个表一个值
- reactjs - 如果索引页面,则从路径中删除 #/
- python - 使用 Map 和 Filter 函数查找地址 - Python
- python - 如何更改 django admin 更改列表页面选项卡的标题
- javascript - 如果 Map 中的条件 // React JS
- swift - swift combine sink receiveValue 内存泄漏
- css - 将 CSS 与 SVG 结合使用
- c# - 将输入字段中的一个值分配给 Razor 中的两个模型对象
- python - 从 python 脚本调用 ExifTool 在 Mac 中挂起,但在 Windows 中有效