R:检查数字序列是否满足特定的容差水平

Adr*_*ian 1 r

values <- c(5, 3, 2, 2.9999, 2.9998, 2.9997, 2.99996, 2.9995, 2.9994, 2.9993, 
            9, 2, 1.9999, 2.9999, 2.9998, 2.9997, 2.99996, 2.9995, 2.9994, 2.9993)
Run Code Online (Sandbox Code Playgroud)

我有一串值,我想获得任何两个连续数字之间的差异低于某个容差水平的索引。

tol = 0.001
> which(abs(diff(values)) < tol)
[1] 4  5  6  7  8  9 12 14 15 16 17 18 19
Run Code Online (Sandbox Code Playgroud)

我想确保任意两个数字之间的差额满足至少连续5个值的公差等级,所以输出应该是这个样子(没有索引12了,因为即使之间的差异2和1.9999低于tol之间的差异1.9999和2.9999不低于tol,所以不满足连续 5 的数字规则)

4  5  6  7  8  9 14 15 16 17 18 19
Run Code Online (Sandbox Code Playgroud)

如何检查任意两个数字之间的差异是否小于至少 5 个连续值的容差水平?

Ron*_*hah 5

您可以rle用来检查 5 个连续值。

which(with(rle(abs(diff(values)) < tol), rep(values & lengths >= 5, lengths)))
#[1]  4  5  6  7  8  9 14 15 16 17 18 19
Run Code Online (Sandbox Code Playgroud)