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

如何获取R语言向量中连续0序列的长度?

解决R语言中计算连续0序列长度的问题

针对你给出的向量a <- c(0,0,1,0,3,0,0,0,0,5,6),要提取每段连续0的长度,最简洁高效的方法是用R内置的rle()游程编码函数,具体实现如下:

方法一:使用rle()函数(推荐)

# 定义目标向量
a <- c(0,0,1,0,3,0,0,0,0,5,6)

# 生成游程编码结果
run_lengths <- rle(a)

# 筛选出值为0的连续段长度
zero_sequence_lengths <- run_lengths$lengths[run_lengths$values == 0]

# 查看结果
zero_sequence_lengths

运行这段代码后,输出结果正好是你期望的:

[1] 2 1 4

原理解释

  • rle()函数会把向量转换成一个列表,包含两个核心元素:
    • values:向量中连续重复的数值
    • lengths:对应数值连续出现的次数
  • 我们只需要通过run_lengths$values == 0筛选出所有值为0的游程,再提取对应的lengths,就得到了每段连续0的长度。

方法二:手动分组统计(适合理解底层逻辑)

如果想手动实现逻辑,可以通过diff()和cumsum()给不同的连续段分组,再统计0所在组的长度:

a <- c(0,0,1,0,3,0,0,0,0,5,6)

# 给每个连续段分配组ID
group_ids <- cumsum(c(TRUE, diff(a != 0) != 0))

# 筛选出0的组,统计每组的长度
zero_lengths <- tapply(a == 0, group_ids, sum)[tapply(a == 0, group_ids, any)]

zero_lengths

这个方法的结果和第一种一致,但代码相对繁琐,日常使用还是推荐rle()。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 03:59:32