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

如何在R中查找长度>3的连续≤2的值及相关信息?

解决连续≤2且长度>3的片段筛选问题

我来帮你搞定这个问题!要找出数据里连续满足pre<=2且长度超过3的片段,同时获取每组的起始位置和长度,咱们可以用R的游程编码(rle)工具来实现,步骤如下:

1. 生成标记向量

首先把原数据转换成标记向量,满足pre<=2的记为1,不满足的记为0,这样方便后续识别连续片段:

set.seed(100)
pre = sample(x=1:5, size = 90, replace = T)
# 生成标记向量
mark <- as.integer(pre <= 2)

2. 用rle分析连续游程

rle()函数可以帮我们识别向量里连续重复的片段,返回的结果包含两个部分:values是每个游程的值(这里就是1或0),lengths是每个游程的长度:

rle_result <- rle(mark)

3. 筛选符合条件的片段

接下来我们要筛选出值为1(也就是满足pre<=2)且长度>3的游程,同时计算每个符合条件的游程的起始位置:

# 找出符合条件的游程索引
valid_runs <- which(rle_result$values == 1 & rle_result$lengths > 3)

# 计算每个有效游程的起始位置
# cumsum计算累计长度,加上初始的1就是每个游程的起始点
start_pos <- cumsum(c(1, rle_result$lengths))[valid_runs]

# 获取有效游程的长度
run_lengths <- rle_result$lengths[valid_runs]

4. 整理成直观的结果

把起始位置和长度组合成数据框,看起来更清晰:

result <- data.frame(
  起始位置 = start_pos,
  连续长度 = run_lengths
)

print(result)

用你设置的set.seed(100)运行这段代码,最终会得到这样的结果:

起始位置 连续长度
1       49        6

这说明数据里只有一组连续≤2且长度超过3的片段,从第49个位置开始,一共6个连续值。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 09:54:01