On Sep 3, 2010, at 6:32 AM, Sarah Sanchez wrote:





Dear R helpers

I have following dataset

rate_number = matrix(c(5, 15, 60, 15, 5, 0, 20, 60, 20,0, 10, 20, 40, 20, 10), nrow = 5, ncol = 3)

range_mat = matrix(c(6.25, 6.75, 7.25, 8.75, 9.25, 9.75, 8.5, 9, 9.5, 10.5, 11, 11.5, 4.25, 4.75, 5.25, 5.75, 6.25, 6.75), nrow = 6, ncol = 3)

rate_number
       [,1]   [,2]   [,3]
[1,]    5     0      10
[2,]   15   20      20
[3,]   60   60      40
[4,]   15   20      20
[5,]    5     0      10

range_mat
     [,1]      [,2]     [,3]
[1,] 6.25     8.5   4.25
[2,] 6.75     9.0   4.75
[3,] 7.25     9.5   5.25
[4,] 8.75   10.5   5.75
[5,] 9.25   11.0   6.25
[6,] 9.75   11.5 6.75

My problem is to generate random numbers in line with rate_number and using the range_mat. E.g.

I need to generate (5, 15, 60, 15, 5 i.e. the first column of rate_number) uniform random numbers (using 1st column of range_mat) s.t the first 5 numbers will be in the range (6.25 - 6.75), next 15 numbers should be in the range (6.75 to 7.25), next 60 numbers should be in the range (7.25 to 8.75), next 15 numbers in the range (8.75 to 9.25) and last 5 numbers in the range (9.25 to 9.75).

This should do it for the first column and modifying to for additional columns should be straightforward:

> mapply(runif, rate_number[,1], range_mat[1:5,1], range_mat[2:6,1])
#---------
rlist <- list()
for (i in 1:ncol(rate_number) ) rlist[[i]] <-mapply(runif, rate_number[,i], range_mat[1:5,i], range_mat[2:6,i])

> str(rlist)
List of 3
 $ :List of 5
  ..$ : num [1:5] 6.38 6.66 6.65 6.27 6.69
  ..$ : num [1:15] 6.81 7.05 6.98 7.03 7.12 ...
  ..$ : num [1:60] 7.34 8.4 7.95 8.53 8.12 ...
  ..$ : num [1:15] 9.25 8.91 8.91 8.77 9.01 ...
  ..$ : num [1:5] 9.58 9.49 9.34 9.61 9.29
 $ :List of 5
  ..$ : num(0)
  ..$ : num [1:20] 9.23 9.47 9.42 9.36 9.06 ...
  ..$ : num [1:60] 10.06 9.81 9.58 10.28 9.69 ...
  ..$ : num [1:20] 10.9 10.8 10.6 10.5 11 ...
  ..$ : num(0)
 $ :List of 5
  ..$ : num [1:10] 4.36 4.58 4.56 4.27 4.72 ...
  ..$ : num [1:20] 5.15 5.09 4.99 4.98 5.06 ...
  ..$ : num [1:40] 5.71 5.35 5.26 5.41 5.58 ...
  ..$ : num [1:20] 5.87 5.93 5.87 6.22 5.96 ...
  ..$ : num [1:10] 6.38 6.62 6.74 6.53 6.45 ...

Similarily, I need to generate (0, 20, 60, 20, 0 i.e. 2nd column of rate_number) uniform random numbers in the range (using 2nd column of range_mat) i.e. (8.5 to 9), (9 to 9.5), (9.5 to 10.5), (10.5 to 11), (11 to 11.5) respectively.

I could have generated these random numbers Individually using runif, but main problem is range_number could be anything i.e. there may be 50 rates but for each rate, no of rate combination will always be 5 i.e. rate_number will always have 5 rows only and also range_mat will always have 6 rows only.

I tried writing loops and even tapply etc. but just can't get through.

I sincerely request you to kindly guide me.

Regards



David Winsemius, MD
West Hartford, CT

______________________________________________
R-help@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.

Reply via email to