On Jun 10, 2009, at 1:36 PM, Logickle wrote:


Sorry, there may be some lingo for describing the extraction problem I have,
but I don't know it.

I have a matrix of 2 rows and N columns, and a vector of N 1s and 2s.

Matrix M:

     1     2     3      4   ...  N
1    A     C     D      G  ...
2    B     D     F      H   ...

Vector v:

1  2  2  1  2  1  1 ... N

I'd like to apply v to M to get

Vector w:

A  D  F  G ...

Using length 10 M and v

> w <- apply(cbind(v, 1:length(v) ), 1, function(x) M[x[1], x[2] ])
 [1] "A" "D" "F" "G" "I" "K" "N" "P" "R" "S"

> M <- matrix(LETTERS[1:20], nrow=2)
> M
     [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10]
[1,] "A"  "C"  "E"  "G"  "I"  "K"  "M"  "O"  "Q"  "S"
[2,] "B"  "D"  "F"  "H"  "J"  "L"  "N"  "P"  "R"  "T"
> v <- c(1,2,2,1, sample(1:2, 6, replace=TRUE) )
> v
 [1] 1 2 2 1 1 1 2 2 2 1

The number of rows in M should not be a problem.


I.e. each element of v is interpreted as a row-index used to extract that row's value from the corresponding column in M into the corresponding column
of w.

Also eventually nrow(M) > 2, in which case the value of the elements of v
would range over 1:nrow(M).

Seems it should be simple, but maybe not?

Seems reasonably simple.

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