[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 
>> about
>> 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
> PLEASE do read the posting guide 
> http://www.R-project.org/posting-guide.html
> and provide commented, minimal, self-contained, reproducible code.



More information about the R-help mailing list