如何计算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
相关产品推荐
相关产品推荐

