You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

R语言如何提取向量中高于阈值的连续子集的起止坐标

R语言提取向量中高于阈值的连续子集起止坐标方案

单行实现方案

基于R内置的游程编码函数rle(),无需依赖任何第三方包,直接运行即可得到符合要求的结果:

data.frame(left = with(rle(v >= 0.7), c(1, cumsum(lengths)[-length(lengths)] + 1)[values]), right = with(rle(v >= 0.7), cumsum(lengths)[values]))

输出结果完全匹配预期:

left right
1    1     4
2   15    23
3   26    29
4   31    32

易读版实现

如果需要后续维护调整,推荐写法更清晰的版本:

threshold <- 0.7
# 计算连续布尔序列的游程编码
run_info <- rle(v >= threshold)
# 计算每个连续块的起止位置
block_end <- cumsum(run_info$lengths)
block_start <- c(1, block_end[-length(block_end)] + 1)
# 筛选出符合阈值条件的块
result <- data.frame(
  left = block_start[run_info$values],
  right = block_end[run_info$values]
)

逻辑说明

  • 核心依赖R内置的rle()(游程编码)函数,是R语言处理连续序列问题的标准惯用方案,长向量场景下性能远高于手写循环
  • 先将原向量转为布尔向量:v >= threshold,大于等于阈值的位置标记为TRUE,反之为FALSE
  • 用rle()统计连续TRUE/FALSE块的长度,再通过累计长度计算每个块的起止索引
  • 最后筛选出值为TRUE的块的起止索引即可得到结果

内容的提问来源于stack exchange,提问作者Marius

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 00:24:05