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 个连续值的容差水平?
您可以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)
| 归档时间: |
|
| 查看次数: |
46 次 |
| 最近记录: |