r - Reshape three column data frame to matrix ("long" to "wide" format) -


i have data.frame looks this.

x 1  x b 2  x c 3  y 3  y b 3  y c 2  

i want in matrix form can feed heatmap make plot. result should like:

       b    c x   1    2    3 y   3    3    2 

i have tried cast reshape package , have tried writing manual function not seem able right.

there many ways this. answer starts favorite ways, collects various ways answers similar questions scattered around site.

tmp <- data.frame(x=gl(2,3, labels=letters[24:25]),                   y=gl(3,1,6, labels=letters[1:3]),                    z=c(1,2,3,3,3,2)) 

using reshape2:

library(reshape2) acast(tmp, x~y, value.var="z") 

using matrix indexing:

with(tmp, {   out <- matrix(nrow=nlevels(x), ncol=nlevels(y),                 dimnames=list(levels(x), levels(y)))   out[cbind(x, y)] <- z   out }) 

using xtabs:

xtabs(z~x+y, data=tmp) 

you can use reshape, suggested here: convert table matrix column names, though have little manipulation afterwards remove columns , names right (not shown).

> reshape(tmp, idvar="x", timevar="y", direction="wide")   x z.a z.b z.c 1 x   1   2   3 4 y   3   3   2 

there's sparsematrix within matrix package, seen here: r - convert big table matrix column names

> with(tmp, sparsematrix(i = as.numeric(x), j=as.numeric(y), x=z, +                        dimnames=list(levels(x), levels(y)))) 2 x 3 sparse matrix of class "dgcmatrix"   b c x 1 2 3 y 3 3 2 

the daply function plyr library used, here: https://stackoverflow.com/a/7020101/210673

> library(plyr) > daply(tmp, .(x, y), function(x) x$z)    y x   b c   x 1 2 3   y 3 3 2 

dcast reshape2 works, here: reshape data values in 1 column, data.frame column x value.

> dcast(tmp, x~y, value.var="z")   x b c 1 x 1 2 3 2 y 3 3 2 

similarly, spread "tidyr" work such transformation:

library(tidyr) spread(tmp, y, z) #   x b c # 1 x 1 2 3 # 2 y 3 3 2 

Comments

Popular posts from this blog

delphi - How to convert bitmaps to video? -

jasper reports - Fixed header in Excel using JasperReports -

python - ('The SQL contains 0 parameter markers, but 50 parameters were supplied', 'HY000') or TypeError: 'tuple' object is not callable -