HI,
Not sure whether this is what you wanted.
library(reshape2)
result.dcast<-dcast(meltTest,A+D~H,value.var="M")
attr(result.reshape,"reshapeWide")<-NULL
?row.names(result.reshape)<-1:nrow(result.reshape)
?identical(result.reshape,result.dcast)
#[1] TRUE
result.dcast
#? A D? I? J? K? L
#1 B E? 1? 2? 3? 4
#2 B F? 5? 6? 7? 8
#3 B G? 9 10 11 12
#4 C E 13 14 15 16
#5 C F 17 18 19 20
#6 C G 21 22 23 24
A.K.
----- Original Message -----
From: Richard M. Heiberger <rmh at temple.edu>
To: r-help <r-help at r-project.org>; Hadley Wickham <h.wickham at
gmail.com>
Cc:
Sent: Monday, March 18, 2013 1:15 PM
Subject: [R] melt with complications
## Can someone suggest a simpler expression than either of these, with the
goal
## of taking a long matrix into a wide one with exactly one of the factors
converted to
## columns and all the rest retained as factors.? I want something that
generalizes beyond
## the three factors illustrated here.
## Rich
meltTest <- data.frame(A=rep(c("B","C"), each=12),
? ? ? ? ? ? ? ? ? ? ? D=rep(c("E","F","G"),
each=4, times=2),
? ? ? ? ? ? ? ? ? ? ?
H=rep(c("I","J","K","L"), times=6),
? ? ? ? ? ? ? ? ? ? ? M=1:24)
meltTest
result.melt <- do.call("rbind", {
? tmp <- cast(D ~ H | A, value="M", data=meltTest)
? lapply(names(tmp), function(x) cbind(A=x, tmp[[x]])) ## explicit use of
name "A"
})
result.melt
result.reshape <- reshape(meltTest, direction="wide",
timevar="H",
idvar=c("A","D"))
names(result.reshape)[3:6] <- unique(as.character(meltTest$H))? ## explicit
use of name "H"
result.reshape
??? [[alternative HTML version deleted]]
______________________________________________
R-help at 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.