Skip to content

how to track a number in a row

4 messages · Márcio Resende, David Winsemius

#
Hi,
I have a 100x15 matrix and in each row a set of 15 random numbers out of 25.
for example:

b <- c(1:25)
a <-matrix(0,10,15)
for (i in 1:10){
a[i,] <- sample(b,15,replace = FALSE)
}

I would like to create another matrix (25x100), for example "d" with the
probability of each number from the first matrix
Therefore I need to track, for example, if number 1 is present in the first
row (d[1,1]) (which would give me an probability of 1 out of 1).
Then, track again if number 1 is present on the second row (d[2,1]) (And if
not, the probability would be 1 out of 2 = 0.5)...and so on for all the 25
collumns (25 numbers) and all the 100 rows.

Could anybody help how to do it??
Thanks in advance
Marcio
#
row (d[1,1]) (which would give >me an probability of 1 out of 1).

Just to make it clear, I need to track on matrix "a" if number 1 is present
in the first row to fill the spot d[1,1] where the first collumn is related
to number 1 and the first row, related to row 1 on matrix a

Thanks again
M?rcio Resende wrote:

  
    
#
On Jan 11, 2010, at 9:38 PM, M?rcio Resende wrote:

            
Maybe:

 > apply(a, 2, table)[[1]]

  1  5  6  7 10 16 21 22 25
  1  2  1  1  1  1  1  1  1
 > apply(a, 2, table)[[1]]/10

   1   5   6   7  10  16  21  22  25
0.1 0.2 0.1 0.1 0.1 0.1 0.1 0.1 0.1
 > lapply(apply(a, 2, table), "/", 10)
[[1]]

   1   5   6   7  10  16  21  22  25
0.1 0.2 0.1 0.1 0.1 0.1 0.1 0.1 0.1

[[2]]

   1   2   7   9  12  15  16  17  25
0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.2


snipped remaining 13 vectors in the 15 element list

 > str(lapply(apply(a, 2, table), "/", 10)[[1]])
  table [1:9(1d)] 0.1 0.2 0.1 0.1 0.1 0.1 0.1 0.1 0.1
  - attr(*, "dimnames")=List of 1
   ..$ : chr [1:9] "1" "5" "6" "7" ...
 > as.numeric(names(lapply(apply(a, 2, table), "/", 10)[[1]]))
[1]  1  5  6  7 10 16 21 22 25


 > d <- matrix(0, nrow=25, ncol=15)
 > d[as.numeric(names(lapply(apply(a, 2, table), "/", 10)[[1]])), 1]  
<- lapply(apply(a, 2, table), "/", 10)[[1]]
 > d
       [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10] [,11] [,12]  
[,13] [,14] [,15]
  [1,]  0.1    0    0    0    0    0    0    0    0     0     0      
0     0     0     0
  [2,]  0.0    0    0    0    0    0    0    0    0     0     0      
0     0     0     0
  [3,]  0.0    0    0    0    0    0    0    0    0     0     0      
0     0     0     0
  [4,]  0.0    0    0    0    0    0    0    0    0     0     0      
0     0     0     0
  [5,]  0.2    0    0    0    0    0    0    0    0     0     0      
0     0     0     0
  [6,]  0.1    0    0    0    0    0    0    0    0     0     0      
0     0     0     0
  [7,]  0.1    0    0    0    0    0    0    0    0     0     0      
0     0     0     0
  [8,]  0.0    0    0    0    0    0    0    0    0     0     0      
0     0     0     0
  [9,]  0.0    0    0    0    0    0    0    0    0     0     0      
0     0     0     0
[10,]  0.1    0    0    0    0    0    0    0    0     0     0      
0     0     0     0
[11,]  0.0    0    0    0    0    0    0    0    0     0     0      
0     0     0     0
[12,]  0.0    0    0    0    0    0    0    0    0     0     0      
0     0     0     0
[13,]  0.0    0    0    0    0    0    0    0    0     0     0      
0     0     0     0
[14,]  0.0    0    0    0    0    0    0    0    0     0     0      
0     0     0     0
[15,]  0.0    0    0    0    0    0    0    0    0     0     0      
0     0     0     0
[16,]  0.1    0    0    0    0    0    0    0    0     0     0      
0     0     0     0
[17,]  0.0    0    0    0    0    0    0    0    0     0     0      
0     0     0     0
[18,]  0.0    0    0    0    0    0    0    0    0     0     0      
0     0     0     0
[19,]  0.0    0    0    0    0    0    0    0    0     0     0      
0     0     0     0
[20,]  0.0    0    0    0    0    0    0    0    0     0     0      
0     0     0     0
[21,]  0.1    0    0    0    0    0    0    0    0     0     0      
0     0     0     0
[22,]  0.1    0    0    0    0    0    0    0    0     0     0      
0     0     0     0
[23,]  0.0    0    0    0    0    0    0    0    0     0     0      
0     0     0     0
[24,]  0.0    0    0    0    0    0    0    0    0     0     0      
0     0     0     0
[25,]  0.1    0    0    0    0    0    0    0    0     0     0      
0     0     0     0

So that "worked for one column. Too bad the R syntax does not allow  
slightly more flexible handling of indices or this might have worked:
 > d[as.numeric(names(lapply(apply(a, 2, table), "/", 10)[[1:15]])),  
1] <- lapply(apply(a, 2, table), "/", 10)[[1:15]]
Error in lapply(apply(a, 2, table), "/", 10)[[1:15]] :
   recursive indexing failed at level 2

As it is a loop does the job:



 > for(i in 1:15) {d[as.numeric(names(lapply(apply(a, 2, table), "/",  
10)[[i]])), i] <- lapply(apply(a, 2, table), "/", 10)[[i]]}
 > d
       [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10] [,11] [,12]  
[,13] [,14] [,15]
  [1,]  0.1  0.1  0.1  0.1  0.0  0.0  0.0  0.1  0.0   0.0   0.1    
0.1   0.1   0.0   0.0
  [2,]  0.1  0.1  0.1  0.0  0.1  0.0  0.0  0.0  0.0   0.0   0.1    
0.0   0.0   0.0   0.0
  [3,]  0.1  0.0  0.0  0.0  0.1  0.0  0.0  0.0  0.1   0.2   0.0    
0.1   0.0   0.0   0.0
  [4,]  0.1  0.0  0.0  0.2  0.0  0.0  0.2  0.0  0.0   0.0   0.0    
0.0   0.0   0.0   0.1
  [5,]  0.2  0.0  0.1  0.0  0.1  0.0  0.0  0.0  0.0   0.0   0.0    
0.0   0.0   0.0   0.3
  [6,]  0.1  0.0  0.0  0.0  0.0  0.0  0.1  0.1  0.0   0.0   0.0    
0.0   0.2   0.1   0.0
  [7,]  0.1  0.1  0.0  0.1  0.0  0.0  0.0  0.1  0.1   0.0   0.2    
0.0   0.0   0.0   0.0
  [8,]  0.1  0.0  0.0  0.1  0.0  0.1  0.0  0.0  0.1   0.1   0.0    
0.1   0.0   0.1   0.0
  [9,]  0.1  0.1  0.0  0.0  0.0  0.0  0.0  0.0  0.2   0.0   0.0    
0.0   0.0   0.1   0.0
[10,]  0.1  0.0  0.0  0.1  0.1  0.0  0.0  0.0  0.0   0.1   0.1   0.0    
0.0   0.2   0.0
[11,]  0.1  0.0  0.0  0.1  0.1  0.0  0.0  0.1  0.0   0.0   0.2   0.0    
0.1   0.0   0.0
[12,]  0.2  0.1  0.1  0.0  0.1  0.0  0.0  0.1  0.0   0.2   0.0   0.0    
0.0   0.0   0.0
[13,]  0.1  0.0  0.1  0.0  0.0  0.1  0.0  0.1  0.0   0.0   0.1   0.1    
0.0   0.1   0.0
[14,]  0.1  0.0  0.1  0.0  0.1  0.0  0.1  0.0  0.1   0.0   0.0   0.1    
0.0   0.1   0.1
[15,]  0.1  0.1  0.0  0.1  0.0  0.0  0.0  0.1  0.0   0.1   0.0   0.0    
0.0   0.0   0.0
[16,]  0.1  0.1  0.0  0.1  0.0  0.2  0.0  0.0  0.0   0.0   0.0   0.0    
0.0   0.0   0.0
[17,]  0.2  0.1  0.0  0.0  0.0  0.1  0.0  0.0  0.1   0.0   0.0   0.1    
0.2   0.0   0.0
[18,]  0.1  0.0  0.0  0.0  0.0  0.1  0.2  0.0  0.0   0.1   0.0   0.2    
0.1   0.1   0.0
[19,]  0.1  0.0  0.1  0.0  0.1  0.1  0.2  0.1  0.1   0.0   0.1   0.0    
0.0   0.0   0.0
[20,]  0.1  0.0  0.1  0.0  0.0  0.0  0.0  0.0  0.0   0.1   0.0   0.1    
0.0   0.1   0.1
[21,]  0.1  0.0  0.0  0.0  0.2  0.1  0.0  0.0  0.0   0.0   0.1   0.0    
0.0   0.0   0.1
[22,]  0.1  0.0  0.1  0.0  0.0  0.0  0.0  0.0  0.0   0.0   0.0   0.1    
0.2   0.0   0.0
[23,]  0.1  0.0  0.0  0.0  0.0  0.0  0.1  0.1  0.2   0.1   0.0   0.0    
0.1   0.0   0.0
[24,]  0.2  0.0  0.0  0.1  0.0  0.1  0.1  0.0  0.0   0.0   0.0   0.0    
0.0   0.1   0.2
[25,]  0.1  0.2  0.1  0.0  0.0  0.1  0.0  0.1  0.0   0.0   0.0   0.0    
0.0   0.0   0.1
 >
David Winsemius, MD
Heritage Laboratories
West Hartford, CT
#
On Jan 11, 2010, at 10:16 PM, David Winsemius wrote:

            
snipped out earlier intermediates

The reason the d matrix looks wrong is that I failed to "zero" it  
after an incorrect application of the loop logic. Ignore this column  
1. I think the "answer" will be what you asked for.
snip
David Winsemius, MD
Heritage Laboratories
West Hartford, CT