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
相关产品推荐
相关产品推荐

