Search code examples
rpoisson

Number from sample to be drawn from a Poisson distribution with upper/lower bounds


Working in R, I need to create a vector of length n with the values randomly drawn from a Poisson distribution with lambda=1, but with a lower bound of 2 and upper bound of 6 (i.e. all numbers will be either 2,3,4,5, or 6).

I am unsure how to do this. I tried creating a for loop that would replace any values outside that range with values inside the range:

seed(123)
n<-25 #example length
example<-rpois(n,1)
test<-example #redundant - only duplicating to compare with original *example* values
 for (i in 1:length(n)){
   if (test[i]<2||test[i]>6){
     test[i]<-rpois(1,1)
   }
 }

But this didn't seem to work (still getting 0's and 1, etc, in test). Any ideas would be greatly appreciated!


Solution

  • Here is one way to generate n numbers with Poisson distribution and replace all the numbers which are outside range to random number inside the range.

    n<-25 #example length
    example<-rpois(n,1)
    inds <- example < 2 | example > 6
    example[inds] <- sample(2:6, sum(inds), replace = TRUE)