# [R] Converting a Matrix to a Vector

Berwin A Turlach berwin at maths.uwa.edu.au
Wed Mar 25 08:42:03 CET 2009

```G'day Ken,

On Wed, 25 Mar 2009 00:13:48 -0700 (PDT)
Ken-JP <kfmfe04 at gmail.com> wrote:

>
> Say I have:
>
> > set.seed( 1 )
> > m <- matrix( runif(5^2), nrow=5, dimnames =
> > list( c("A","B","C","D","E"), c("O","P","Q","R","S") ) )
> > m
>           O          P         Q         R         S
> A 0.2655087 0.89838968 0.2059746 0.4976992 0.9347052
> B 0.3721239 0.94467527 0.1765568 0.7176185 0.2121425
> C 0.5728534 0.66079779 0.6870228 0.9919061 0.6516738
> D 0.9082078 0.62911404 0.3841037 0.3800352 0.1255551
> E 0.2016819 0.06178627 0.7698414 0.7774452 0.2672207
>
> -------------------------------------------------------------------------------------------
>
> I want to create a vector v from matrix m that looks like this:
>
> A.O 0.2655087
> B.O 0.3721239
>
> v <- as.vector( m ) almost gives me what I want, but then I need to
> take combinations of colnames( m ) and rownames( m ) to get my labels
> and hope they match up in order: if not, manipulate the order.  This
> approach feels kludgy...
>
> Is this the right approach or is there a better way?

R> tt <- reshape(data.frame(m), direction="long", varying=list(1:5), ids=rownames(m), times=colnames(m))
R> ind <- names(tt) %in% c("time", "id")
R> uu <- tt[,!ind]
R> names(uu) <- rownames(tt)
R> uu
A.O        B.O        C.O        D.O        E.O        A.P        B.P
0.26550866 0.37212390 0.57285336 0.90820779 0.20168193 0.89838968 0.94467527
C.P        D.P        E.P        A.Q        B.Q        C.Q        D.Q
0.66079779 0.62911404 0.06178627 0.20597457 0.17655675 0.68702285 0.38410372
E.Q        A.R        B.R        C.R        D.R        E.R        A.S
0.76984142 0.49769924 0.71761851 0.99190609 0.38003518 0.77744522 0.93470523
B.S        C.S        D.S        E.S
0.21214252 0.65167377 0.12555510 0.26722067

HTH.

Cheers,

Berwin