On Thu, 2005-12-29 at 17:20 +0100, Florent Bresson
wrote:> I'm dealing with a matrix like :
>
> "x" "y" "z"
> [1,] 2 4 1
> [2,] 6 1 2
> ...
> [n,] 7 3 1
>
> For each row I would like to know the header of the
> column which corresponds to the minimum value. In the
> case of my matrix, I would like to obtain the
> following vector :
>
> z y ... z
>
> Any idea ?
> mat
x y z
[1,] 2 4 1
[2,] 6 1 2
[3,] 7 3 1
> colnames(mat)[apply(mat, 1, which.min)]
[1] "z" "y" "z"
apply() (using '1') passes each row to the function which.min() which
returns the index of the minimum value for the row. The indices are then
passed to colnames(mat), returning the column names on a row by row
basis as a vector.
See ?colnames, ?apply and ?which.min for more information.
HTH,
Marc Schwartz