Generating the Continuous Sequence of Number for Consecutive Positive Number in R -
this data
diff= c(0.0,1.7,3.2,-0.7,-1.0,2.2,-2,-0.9) s<- data.frame(diff) here can see have 2 columns diff & expected_seq. data sequence given diff column expected sequence should generated
> 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 basically value greater 0 should generate sequence of incremented value (1,2,3,4,5....) till next negative ...and on
here's possible solution :
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 subgroups, create indexes or 0 each subgroup , add 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
Comments
Post a Comment