# [R] How do you test for "consecutivity"?

Julian Burgos jmburgos at u.washington.edu
Tue Apr 29 19:48:28 CEST 2008

```Hey Anthony,
My previous function may not work in all cases.  Say one of the
experiments yields these numbers:

1,2,3,6,7

Would you say that the proportion of consecutive numbers is 100%?  If
so, this will work:

prop.diff=function(x){
d=diff(sort(x))
prop=sum((c(0,d==1)+c(d==1,0))>0)
prop=prop/length(x)
return(prop)}

This function first identifies which numbers in your original vector are
part of a sequence of consecutive numbers.

Julian

Julian Burgos wrote:
> Hey Anthony,
> There must be many ways to do this.  This is one of them:
>
> #First, define a function to calculate the proportion of consecutive
> numbers in a vector.
>
> prop.diff=function(x){
> d=diff(sort(x))
> prop=(sum(d==1)+1)/length(x)
> return(prop)}
>
> #Note that I am counting both numbers in a consecutive pair.  For
> example, the vector c(1,2,6,9,10) will contain 4 consecutive numbers.  I
> think this is what you wanted do do, right?
>
> #Next, generate a matrix with 1000 columns (one for each experiment) and
> 5 rows (the five numbers in each experiment).  Note the use of the
> 'replicate' function to generate multiple sets of random numbers
>
> selection=replicate(1000,sort(sample(1:30,5)))
>
> #Third, use the apply function to apply the function we defined above to
> each column of the matrix
>
> diffs=apply(selection,2,prop.diff)
>
> # This will give you a vector with the 1000 proportions of consecutive
> numbers
>
> Julian
>
>
> Anthony28 wrote:
>> I need to use R to model a large number of experiments (say, 1000). Each
>> experiment involves the random selection of 5 numbers (without
>> replacement)
>> from a pool of numbers ranging between 1 and 30.
>>
>> What I need to know is what *proportion* of those experiments contains
>> two
>> or more numbers that are consecutive. So, for instance, an experiment
>> that
>> yielded the numbers 2, 28, 31, 4, 27 would be considered a "consecutive =
>> true" experiment since 28 and 27 are two consecutive numbers, even though
>> they are not side-by-side.
>>
>> I am quite new to R, so really am puzzled as to how to go about this.
>> I've
>> tried sorting each experiment, and then subtracting adjacent pairs of
>> numbers to see if the difference is plus or minus 1. I'm also unsure
>> whether to use an array to store all the data first.
>>
>> Any assistance would be much appreciated.
>
> ______________________________________________
> R-help at r-project.org mailing list
> https://stat.ethz.ch/mailman/listinfo/r-help