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

向量连续0最大长度与平均长度计算问题求解

实现方案

R 自带的 rle() 游程编码函数可以直接实现该需求,它会自动统计向量中连续相同值的长度和对应取值,你只需要封装成自定义函数,再传入 apply 即可批量处理多组数据。


步骤1:封装统计函数

calc_zero_stats <- function(input_vec) {
  # 计算输入向量的游程编码
  run_res <- rle(input_vec)
  # 筛选所有取值为0的连续段长度
  zero_lengths <- run_res$lengths[run_res$values == 0]
  
  # 处理向量中无0的边界情况
  if (length(zero_lengths) == 0) {
    return(c(max_zero = 0, avg_zero = 0))
  }
  
  # 计算两个目标指标
  max_len <- max(zero_lengths)
  avg_len <- mean(zero_lengths)
  return(c(max_zero = max_len, avg_zero = avg_len))
}

效果测试

用你给出的示例向量测试:

test_vec <- c(1,1,0,0,0,1,1,1,1,0,0,1,1,1,0)
calc_zero_stats(test_vec)

输出结果为 max_zero=3、avg_zero=2,和你的预期完全一致。


步骤2:结合 apply 批量处理

如果你的多组观测按行存放在矩阵/数据框中,按行遍历计算即可:

# 示例构造3组观测的矩阵,每行为一组待计算向量
data_mat <- rbind(
  c(1,1,0,0,0,1,1,1,1,0,0,1,1,1,0),
  c(0,0,1,0,1,1,0,0,0,0,1,0,1,1,1),
  c(1,1,1,1,1,1,1,1,1,1,1,1,1,1,1)
)

# MARGIN=1 表示按行遍历,结果转置后每行对应一组观测的统计值
result <- t(apply(data_mat, MARGIN = 1, FUN = calc_zero_stats))

如果你的观测按列存放,把 MARGIN 参数改为 2 即可。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.09 10:39:03