[R] Counter in a For Loop - Efficiency Issue
    Petr Savicky 
    savicky at praha1.ff.cuni.cz
       
    Wed Feb  2 11:29:50 CET 2011
    
    
  
On Wed, Feb 02, 2011 at 09:35:28AM +0200, Leendert Punt wrote:
> I have a 32000 x 14 matrix (M) where entry (x, y) corresponds to
> person x at a discrete time y. I then have a matrix (M2) of 60000 x 2
> where each entry is a an event by a person that is in the above 32000
> and at a time that is in the range of the discrete time points above.
> I want to populate the another matrix (M3) such that (x, y) is the
> number of events of person x between times y-1 and y. This is simple
> to code, (I just put the discrete time points and the 32000 people in
> their own vectors, V1 and V2):
> 
> 
> for (i in 1:32000){
> for (j in 1:60000){
> 
> for (k in 2:14){
> 
> if (M2[1, j] == V2[i]   &   M2[2, j]  > V1[k-1]   &  M2[2, j] <= V1[k])
> M3[i, k] = M3[i, k]+1
> 
> }}}
Consider the following approach, which uses M2, V1 and V2 as
used in the code above.
  V1 <- c(0, 10, 20, 30, 40)
  V2 <- 1:3 # list of persons in the required order
  M2 <- rbind(
  c(1, 2, 1, 1, 3, 1, 3, 1),
  c(11, 21, 21, 21, 11, 21, 11, 31))
  person <- factor(M2[1, ], levels=V2)
  interval <- cut(M2[2, ], breaks=V1)
  M3 <- table(person, interval)
  M2
     [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8]
[1,]    1    2    1    1    3    1    3    1
[2,]   11   21   21   21   11   21   11   31
  M3
        interval
  person (0,10] (10,20] (20,30] (30,40]
       1      0       1       3       1
       2      0       0       1       0
       3      0       2       0       0
Does this approach work for your data?
Petr Savicky.
    
    
More information about the R-help
mailing list