假设我想在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?
中的矢量中找到最长的非零数字序列答案 0 :(得分:4)
我们可以使用rle
。 A==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