2017-08-15 110 views
0

这是数据生成数的连续序列连续正数R中

Diff= c(0.0,1.7,3.2,-0.7,-1.0,2.2,-2,-0.9) 

s<- data.frame(Diff) 

在这里我们可以看到,我们有两列Diff & Expected_Seq。 对于Data Sequence given by Diff Column预期序列应生成

> s 
    Diff Expected_Seq 
1 0.0   0 
2 1.7   1 
3 3.2   2 
4 -0.7   0 
5 -1.0   0 
6 2.2   1 
7 -2.0   0 
8 -0.9   0 

基本上值Greater then 0应该生成增加后的值的序列(1,2,3,4,5 ....),直到下一个是负...和等

+1

你需要坐下来与一些纸,然后划掉,将采取并在此尝试的基本逻辑。有了真正的尝试,人们会有所帮助。但是堆栈并不是其他人为你工作的地方,当你陷入困境时,它是一个寻找和指导的地方。 – sconfluentus

回答

0

这里是一个可能的解决方案:

Diff= c(0.0,1.7,3.2,-0.7,-1.0,2.2,-2,-0.9) 
s <- data.frame(Diff) 

# define indexes of subgroups of consecutive positive or negative numbers 
RLE <- rle(Diff>=0) 
RLE$values <- 1:length(RLE$values) 
subgrps <- inverse.rle(RLE) 

# aggregate by subgroups, create indexes or zero for each subgroup and add to the data.frame 
s$Expected_Seq <- unlist(tapply(Diff,INDEX=subgrps,function(x) ifelse(x < 0,0,1:length(x)))) 

> s 
    Diff Expected_Seq 
1 0.0   1 
2 1.7   2 
3 3.2   3 
4 -0.7   0 
5 -1.0   0 
6 2.2   1 
7 -2.0   0 
8 -0.9   0