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

如何统计R语言中含0、1、2的向量内连续零的分布?

提取R向量中连续零模式的出现次数

嘿,我来帮你搞定这个提取连续零模式次数的问题!针对你这种只包含0、1、2的向量,我们可以用R的原生函数高效解决,就算是1000-2000元素的数据集也完全没问题。

完整解决方案代码

# 示例向量(你可以替换成自己的数据集)
x <- c(0,1,0,2,0,0,1,0,0,1,0,0,0,1,0)

# 1. 对向量做游程编码,获取连续重复元素的长度和对应值
rle_result <- rle(x)

# 2. 筛选出所有连续零序列的长度
zero_run_lengths <- rle_result$lengths[rle_result$values == 0]

# 3. 统计每个零序列长度的出现次数
zero_count_table <- table(zero_run_lengths)

# 4. 转换成要求的输出格式:"0 3 00 2 000 1" 这种形式
output_elements <- mapply(function(len_str, count) {
  zero_pattern <- paste(rep("0", as.integer(len_str)), collapse = "")
  paste(zero_pattern, count)
}, names(zero_count_table), zero_count_table)

# 合并成最终输出字符串
final_output <- paste(output_elements, collapse = " ")

# 打印结果
cat(final_output)
# 输出:0 3 00 2 000 1

步骤详解

  • 游程编码(rle()):这个函数是核心!它会把输入向量转换成一个包含lengths和values的列表:lengths记录每个连续重复元素的长度,values记录对应的元素值。比如示例向量经过rle()后,会得到类似lengths: c(1,1,1,1,2,1,2,1,3,1,1),values: c(0,1,0,2,0,1,0,1,0,1,0)的结果。
  • 筛选连续零的长度:我们只需要从rle_result里挑出values == 0对应的lengths,这就是所有连续零序列的长度列表(示例里是c(1,1,2,2,3,1))。
  • 统计次数:用table()函数统计每个长度出现的次数,得到类似1:3, 2:2, 3:1的结果。
  • 格式转换:把每个长度数字转换成对应数量的"0"字符串(比如长度1→"0",长度2→"00"),再和次数拼接成“模式 次数”的格式,最后合并成一个完整的输出字符串。

这个方法效率很高,就算是最大长度等于向量总长度的极端情况也能完美处理,完全适配你的数据集规模。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 09:38:50