r - 从包含间隙的序列中获取开始和结束范围

标签 r

假设我有以下数据:

c(1:4,7:15,20:23,25,30:35,40,41)
我想从该向量中获取开始和结束范围。然而,我想跳过没有自然前驱和后继的单个值(在示例中:25)。换句话说,应该至少有两个连续的值来构成一个“范围”。
本例中的起始范围是:1, 7, 20, 30, 40它们对应的结束范围是:4, 15, 23, 35, 41有没有优雅的内置解决方案?我几乎陷入了 for 循环 hell 。

最佳答案

确定地点 diff(x)是 > 1,通过添加 TRUE 适本地滞后到序列的开头或结尾。 ( diff(x) 生成的向量比 x 短一个元素。) &子句摆脱了单例值。

dx1 <- c(TRUE,diff(x)>1)
dx2 <- c(diff(x)>1, TRUE)
start <- x[dx1 & !dx2]
end <-   x[dx2 & !dx1]
可能还有一个类似 rle(diff(x)==1) 的解决方案,但它会比上面的解决方案复杂一些(例如,如果您想识别特定长度的运行,它可能会很有用)。

关于r - 从包含间隙的序列中获取开始和结束范围,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68702354/

相关文章:

r - R : Use list argument as character string 中的函数

r - 如何从 R 中的 (9) 个重复值创建新变量?我需要循环吗?

r - 来自 R 博客网页的 EM 算法中的 R 代码错误

R - 在浏览器中获取帮助而不是内置的 R 帮助程序

r - 我可以使用 dplyr 对每组不同的大小进行子采样吗?

arrays - R中的累积多维数组和

线性回归模型的 R 预测

html - R中带有Knitr的高级html表-xtable包的替代品?

R ggplot2 : Title and legend in one line

r - R中的嵌套字典