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


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??

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
>
Thanks in advance
Marcio


--


David Winsemius, MD
Heritage Laboratories
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