gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 00:30:04 24 4
gpt4 key购买 nike

假设我想在 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中的向量中找到最长的非零数字序列?

最佳答案

我们可以使用 rle . A==0输出一个逻辑索引向量,rle计算对于逻辑向量相同的相邻元素的值的长度和游程。提取 lengths不是“0”的值并得到 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

关于R:如何在向量中的两个值之间找到最大长度序列?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29136136/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com