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

R语言查找数组中连续相同元素的起始索引与计数的实现方法

R语言获取数组连续相同元素位置信息的实现方法

核心思路

直接用R内置的rle()(运行长度编码)函数即可快速得到连续重复元素的取值和重复次数,再遍历计算每个连续序列的起始索引,过滤掉长度≤1的序列就能满足排除末尾单独元素的要求。

完整实现代码

# 原始数组
a <- c(1,2,3,30,30,30,30,30,2,2,3,3,3,30)

# 计算连续元素的运行长度编码
rle_result <- rle(a)

# 初始化存储结果的容器
output <- list()
# 累计索引计数器,用于计算每个连续序列的起始位置
cum_idx <- 0

for (i in seq_along(rle_result$lengths)) {
  seq_len <- rle_result$lengths[i]
  seq_val <- rle_result$values[i]
  start_pos <- cum_idx + 1
  # 仅保留连续出现次数大于1的序列,自动过滤末尾单独的30
  if (seq_len > 1) {
    output[[length(output) + 1]] <- c(seq_val, seq_len, start_pos)
  }
  cum_idx <- cum_idx + seq_len
}

# 打印所有符合要求的结果
print(output)

输出说明

运行上述代码后,输出结果包含所有符合要求的连续序列:

  • 连续出现5次的30:[30, 5, 4](就是你需要的目标结果)
  • 连续出现2次的2:[2, 2, 9]
  • 连续出现3次的3:[3, 3, 11]

如果只需要筛选值为30的结果,只需要把循环内的判断条件修改为if (seq_len > 1 && seq_val == 30)即可,输出只会返回[30, 5, 4]。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 04:51:03