Skip to content

Converting a Matrix to a Vector

5 messages · Ken-JP, Dimitris Rizopoulos, Berwin A Turlach +2 more

#
Say I have:
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?
#
try this:

set.seed(1)
m <- matrix(runif(5^2), nrow = 5,
     dimnames = list(c("A","B","C","D","E"), c("O","P","Q","R","S")))

v <- c(m)
names(v) <- paste(rownames(m), colnames(m)[col(m)], sep = ".")
# or
# names(v) <- outer(rownames(m), colnames(m), paste, sep = ".")
v


I hope it helps.

Best,
Dimitris
Ken-JP wrote:

  
    
#
G'day Ken,

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

            
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

=========================== Full address =============================
Berwin A Turlach                            Tel.: +65 6516 4416 (secr)
Dept of Statistics and Applied Probability        +65 6516 6650 (self)
Faculty of Science                          FAX : +65 6872 3919       
National University of Singapore     
6 Science Drive 2, Blk S16, Level 7          e-mail: statba at nus.edu.sg
Singapore 117546                    http://www.stat.nus.edu.sg/~statba
#
Use the 'reshape' package:
X1 X2      value
1   A  O 0.26550866
2   B  O 0.37212390
3   C  O 0.57285336
4   D  O 0.90820779
5   E  O 0.20168193
6   A  P 0.89838968
7   B  P 0.94467527
8   C  P 0.66079779
9   D  P 0.62911404
10  E  P 0.06178627
11  A  Q 0.20597457
12  B  Q 0.17655675
13  C  Q 0.68702285
14  D  Q 0.38410372
15  E  Q 0.76984142
16  A  R 0.49769924
17  B  R 0.71761851
18  C  R 0.99190609
19  D  R 0.38003518
20  E  R 0.77744522
21  A  S 0.93470523
22  B  S 0.21214252
23  C  S 0.65167377
24  D  S 0.12555510
25  E  S 0.26722067

        
On Wed, Mar 25, 2009 at 3:13 AM, Ken-JP <kfmfe04 at gmail.com> wrote:

  
    
#
try also

m <- matrix( runif(5^2), nrow=5, dimnames = Names<- list(
c("A","B","C","D","E"),
 c("O","P","Q","R","S") ) )

data.frame(expand.grid(Names[[1]],Names[[2]]),as.numeric(m))
data.frame(code=outer(Names[[1]],Names[[2]],paste,sep=".")[1:25],num=as.numeric(m))


Patrizio


2009/3/25 jim holtman <jholtman at gmail.com>: