R:如何在向量中找到两个值之间的最大长度序列?

时间:2015-03-19 00:40:31

标签: r

假设我想在R中的序列中找到连续数字的最长长度(不包括0)。

示例:(0,2,3,0,5)在这种情况下,它应该返回2

我想出的解决方案如下:

A1 <- c(1, 1, 0,1,1,1)  
length =NULL  
B<-rle(A1==0)  
C<-B$lengths  
D<-B$values  
for(i in 1:length(C)){  
if(D[i]==FALSE){length[i]=C[i]}
}

length <- length [!is.na(length )]  
max(length)  
[1] 3

如何在R?

中的矢量中找到最长的非零数字序列

1 个答案:

答案 0 :(得分:4)

我们可以使用rleA==0输出逻辑索引向量,rle计算逻辑向量相同的相邻元素的值的长度和运行。提取不是&#39; 0&#39;的lengths值。并在删除第一个和最后一个元素后获取max以考虑向量开始或结束时非零元素的最大长度。

 max(with(rle(A==0), lengths[-c(1, length(lengths))][
                     !values[-c(1, length(values))]]))
 #[1] 2

另一个例子

   A1 <- c(1, 1, 1, 1, 1, 0, 0, 1, 1, 0, 0,0, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1)
  max(with(rle(A1==0), lengths[-c(1, length(lengths))][
                      !values[-c(1, length(values))]]))
  #[1] 4

 indx <- A1==0
 max(with(rle(A1[which(indx)[1L] : tail(which(indx),1)]==0), 
                   lengths[!values]))
#[1] 4

更新

根据新信息,您可以尝试,

 A1 <- c(1, 1, 0,1,1,1)  
 max(with(rle(A1==0), lengths[!values]))
 #[1] 3