[R] Reshape matrix from wide to long format

0 views
Skip to first unread message

Daren Tan

unread,
Nov 25, 2008, 7:19:26 AM11/25/08
to r-h...@stat.math.ethz.ch


I forgot the reshape equivalent for converting from wide to long format. Can someone help as my matrix is very big. The followin is just an example.

> m <- matrix(1:20, nrow=4, dimnames=list(LETTERS[1:4], letters[1:5]))
> m
a b c d e
A 1 5 9 13 17
B 2 6 10 14 18
C 3 7 11 15 19
D 4 8 12 16 20

> as.data.frame(cbind(rep(rownames(m), ncol(m)), rep(colnames(m), each=nrow(m)), c(m)))
V1 V2 V3
1 A a 1
2 B a 2
3 C a 3
4 D a 4
5 A b 5
6 B b 6
7 C b 7
8 D b 8
9 A c 9
10 B c 10
11 C c 11
12 D c 12
13 A d 13
14 B d 14
15 C d 15
16 D d 16
17 A e 17
18 B e 18
19 C e 19
20 D e 20

______________________________________________
R-h...@r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-help
PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
and provide commented, minimal, self-contained, reproducible code.

Gabor Grothendieck

unread,
Nov 25, 2008, 8:01:18 AM11/25/08
to Daren Tan, r-h...@stat.math.ethz.ch
Try this:

> as.data.frame.table(m)
Var1 Var2 Freq


1 A a 1
2 B a 2
3 C a 3
4 D a 4
5 A b 5
6 B b 6
7 C b 7
8 D b 8
9 A c 9
10 B c 10
11 C c 11
12 D c 12
13 A d 13
14 B d 14
15 C d 15
16 D d 16
17 A e 17
18 B e 18
19 C e 19
20 D e 20

stephen sefick

unread,
Nov 25, 2008, 8:07:07 AM11/25/08
to Gabor Grothendieck, r-h...@stat.math.ethz.ch
#handy if you like ggplot2 as this is required
#I think this is what you want
library(reshape)

m <- matrix(1:20, nrow=4, dimnames=list(LETTERS[1:4], letters[1:5]))
melt(m)

--
Stephen Sefick

Let's not spend our time and resources thinking about things that are
so little or so large that all they really do for us is puff us up and
make us feel like gods. We are mammals, and have not exhausted the
annoying little problems of being mammals.

-K. Mullis

Dieter Menne

unread,
Nov 25, 2008, 8:09:09 AM11/25/08
to r-h...@r-project.org


Daren Tan wrote:
>
>
> I forgot the reshape equivalent for converting from wide to long format.

> Can someone help as my matrix is very big. The following is just an


> example.
>
>> m <- matrix(1:20, nrow=4, dimnames=list(LETTERS[1:4], letters[1:5]))
>

Gabor's solution is uses more basic functions, but package reshape or
function reshape(...direction="long") would also work


library(reshape)


m <- matrix(1:20, nrow=4, dimnames=list(LETTERS[1:4], letters[1:5]))

mdf = cbind(V1=rownames(m),as.data.frame(m))
melt(mdf)


Dieter

--
View this message in context: http://www.nabble.com/Reshape-matrix-from-wide-to-long-format-tp20680567p20680900.html
Sent from the R help mailing list archive at Nabble.com.

Reply all
Reply to author
Forward
0 new messages