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

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


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.



More information about the R-help mailing list