[R] matrix to vector

David Winsemius dwinsemius at comcast.net
Fri May 29 21:34:47 CEST 2009


Not sure it is really "matrix to vector" but here are a few of attempts:

 > abM<-matrix(1:9, nrow=3)
 > rownames(abM) <- letters[1:3]
 > colnames(abM) <- letters[4:6]

 > data.frame( cols=colnames(abM)[col(abM)[1:9]], rows= rownames(abM) 
[row(abM)[1:9]], vals=abM[1:9])
   cols rows vals
1    d    a    1
2    d    b    2
3    d    c    3
4    e    a    4
5    e    b    5
6    e    c    6
7    f    a    7
8    f    b    8
9    f    c    9

 > matrix( c(colnames(abM)[col(abM)[1:9]], rownames(abM)[row(abM) 
[1:9]], abM[1:9]) ,ncol=3)
# all text values since matrices in R need to be of homogenous type
       [,1] [,2] [,3]
  [1,] "d"  "a"  "1"
  [2,] "d"  "b"  "2"
  [3,] "d"  "c"  "3"
  [4,] "e"  "a"  "4"
  [5,] "e"  "b"  "5"
  [6,] "e"  "c"  "6"
  [7,] "f"  "a"  "7"
  [8,] "f"  "b"  "8"
  [9,] "f"  "c"  "9"

But the most compact would be:

 >library(reshape)
 > melt(abM)
   X1 X2 value
1  a  d     1
2  b  d     2
3  c  d     3
4  a  e     4
5  b  e     5
6  c  e     6
7  a  f     7
8  b  f     8
9  c  f     9


On May 29, 2009, at 2:43 PM, Ian Coe wrote:

> Hi,
>
>   Is there a way to  convert a matrix into a vector representing all
> permutations of values and column/row headings with native R  
> functions?
> I did this with 2 nested for loops and it took about 25 minutes to run
> on a  ~700x700 matrix.  I'm assuming there must be a smarter way to do
> this with R's vector commands, but being new to R, I'm having trouble
> making it work.
>
> Thanks,
>
> Ian
>
>
>     [a] [b] [c]
>
> [d]    1    4    7
>
> [e]    2    5    8
>
> [f]    3    6    9
>
>
>
> a d 1
>
> a e 2
>
> a f 3
>
> b d 4
>
> b e 5
>
> b f 6
>
> c d 7
>
> c e 8
>
> c f 9
> --
> Ian Coe
>
> Connective Capital Management, LLC
>
> 385 Homer Ave.
>
> Palo Alto, CA 94301
>
> (650) 321-4826 ext. 03
>
-- 
David Winsemius, MD
Heritage Laboratories
West Hartford, CT




More information about the R-help mailing list