Skip to content

transposing a matrix - row by row?

4 messages · Dimitri Liakhovitski, ONKELINX, Thierry, Dimitris Rizopoulos

#
Hello,
I have a matrix that is a product of tapply on a larger data set.
Let's assume it looks like this:

X<-matrix(c(10,20,30,40,50,60),2,3)
dimnames(X)<-list(c("1","2"),c("1","2","3"))
(X)

   1   2   3
1 10 30 50
2 20 40 60

Is there an efficient way of transforming this matrix into the following matrix:

rows columns entries
1          1          10
1          2          30
1          3          50
2          1          20
2          2          40
2          3          60


Thank you very much!
#
Dear Dimitri,

Have a look at melt() from the reshape package.

X<-matrix(c(10,20,30,40,50,60),2,3)
dimnames(X)<-list(c("1","2"),c("1","2","3"))
library(reshape)
melt(X)

HTH,

Thierry 


------------------------------------------------------------------------
----
ir. Thierry Onkelinx
Instituut voor natuur- en bosonderzoek / Research Institute for Nature
and Forest
Cel biometrie, methodologie en kwaliteitszorg / Section biometrics,
methodology and quality assurance
Gaverstraat 4
9500 Geraardsbergen
Belgium 
tel. + 32 54/436 185
Thierry.Onkelinx at inbo.be 
www.inbo.be 

To call in the statistician after the experiment is done may be no more
than asking him to perform a post-mortem examination: he may be able to
say what the experiment died of.
~ Sir Ronald Aylmer Fisher

The plural of anecdote is not data.
~ Roger Brinner

The combination of some data and an aching desire for an answer does not
ensure that a reasonable answer can be extracted from a given body of
data.
~ John Tukey

-----Oorspronkelijk bericht-----
Van: r-help-bounces at r-project.org [mailto:r-help-bounces at r-project.org]
Namens Dimitri Liakhovitski
Verzonden: donderdag 23 april 2009 16:31
Aan: R-Help List
Onderwerp: [R] transposing a matrix - row by row?

Hello,
I have a matrix that is a product of tapply on a larger data set.
Let's assume it looks like this:

X<-matrix(c(10,20,30,40,50,60),2,3)
dimnames(X)<-list(c("1","2"),c("1","2","3"))
(X)

   1   2   3
1 10 30 50
2 20 40 60

Is there an efficient way of transforming this matrix into the following
matrix:

rows columns entries
1          1          10
1          2          30
1          3          50
2          1          20
2          2          40
2          3          60


Thank you very much!
#
one way is the following:

X <- matrix(c(10,20,30,40,50,60), 2, 3,
     dimnames = list(c("1","2"), c("1","2","3")))

tX <- t(X)
cbind(
     rows = c(col(tX)),
     columns = c(row(tX)),
     entries = c(tX)
)


I hope it helps.

Best,
Dimitris
Dimitri Liakhovitski wrote:

  
    
#
Thank you very much, Thierry!
Really amazing, the magic melt from reshape. And, in fact, a bit
dangerous - it just do what I need without any efforts on my part!
Dimitri

On Thu, Apr 23, 2009 at 10:40 AM, ONKELINX, Thierry
<Thierry.ONKELINX at inbo.be> wrote: