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

如何计算R语言Data.frame每行中两个1之间的最大连续零个数?

解决方法

这个需求很明确,我来给你一步步实现:核心思路是找到每行里所有1的位置,计算相邻两个1之间的连续0个数,再取最大值;如果一行里1的数量少于2,那结果直接是0(毕竟没有两个1来夹着0嘛)。

第一步:定义处理单行的函数

先写一个专门处理单个0-1向量的函数,逻辑很清晰:

max_zero_between_ones <- function(x) {
  # 找到当前行中所有值为1的位置索引
  one_positions <- which(x == 1)
  # 如果1的数量不足2,直接返回0
  if (length(one_positions) < 2) {
    return(0)
  }
  # 相邻1的位置差减1,就是中间连续0的个数,取最大值
  max(diff(one_positions) - 1)
}

第二步:应用函数到你的数据框

把这个函数用apply逐行作用到数据的d0到d5列上,再把结果作为新列添加到原数据框:

# 你的原始数据
df <- data.frame(id=c("a","b","c","d","e","f"), 
                 d0=c(1,1,0,1,1,0), 
                 d1=c(0,0,0,0,1,1), 
                 d2=c(0,0,1,1,1,1), 
                 d3=c(1,1,0,1,1,1), 
                 d4=c(1,0,1,0,0,1), 
                 d5=c(1,1,1,1,1,1))

# 计算每行的结果,添加为新列max_zero
df$max_zero <- apply(df[, -1], 1, max_zero_between_ones)

第三步:验证结果

运行后你会得到这样的输出:

> df
  id d0 d1 d2 d3 d4 d5 max_zero
1  a  1  0  0  1  1  1        2
2  b  1  0  0  1  0  1        2
3  c  0  0  1  0  1  1        1
4  d  1  0  1  1  0  1        1
5  e  1  1  1  1  0  1        1
6  f  0  1  1  1  1  1        0

逐个验证下:

  • 行a的序列1,0,0,1,1,1,前两个1之间有2个连续0,结果正确;
  • 行c的序列0,0,1,0,1,1,两个1之间有1个0,结果正确;
  • 行f的序列里第一个1之后全是1,没有两个1夹着的0,结果0,符合预期。

这个函数不管你的序列长度是多少都能通用,完全适配你的需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 12:34:05