Comparing dcast and reshape

classic Classic list List threaded Threaded
3 messages Options
Reply | Threaded
Open this post in threaded view
|

Comparing dcast and reshape

nutterb
I'm in the middle of my own little intellectual exercise comparing
dcast() and reshape() and have successfully stumped myself.  I want to
melt() a data frame, then dcast() it into a new form.  After doing so, I
want to duplicate the process using reshape().  

So far, I can do the melt and cast

require(reshape2)

Raw <- data.frame(site = c(1, 1, 1, 1, 2, 2, 2, 2),
                  id   = c(1, 1, 2, 2, 1, 1, 2, 2),
                  instrument = rep(c("beck", "phq"), 4),
                  base.score = c(27, 13, 31, 11, 22, 10, 41, 17),
                  score.90d = c(20, 11, 27, 12, 24, 8, 34, 15))

Full.Melt <- melt(Raw, id.vars=c("site", "id", "instrument"),
                  measure.vars=c("base.score", "score.90d"))

FullCast <- dcast(Full.Melt, site + id ~ instrument + variable,
                   value.var="value")

> FullCast
  site id beck_base.score beck_score.90d phq_base.score phq_score.90d
1    1  1              27             20             13            11
2    1  2              31             27             11            12
3    2  1              22             24             10             8
4    2  2              41             34             17            15


I can also replicate the melt using reshape, but I can't reshape it into
the same wide format.

FullLong <- reshape(Raw,
                    varying=list(score=c("base.score", "score.90d")),
                    idvar=c("site", "id", "instrument"),
                    direction="long")


Any pointers on how to get FullLong into the same wide format as
FullCast?

Thanks for taking the time to educate me.
  Benjamin Nutter |  Biostatistician     |  Quantitative Health Sciences
  Cleveland Clinic    |  9500 Euclid Ave.  |  Cleveland, OH 44195  |
(216) 445-1365


===================================


 Please consider the environment before printing this e-mail

Cleveland Clinic is ranked one of the top hospitals in America by U.S.News & World Report (2012).  
Visit us online at http://www.clevelandclinic.org for a complete listing of our services, staff and locations.


Confidentiality Note:  This message is intended for use ...{{dropped:15}}

______________________________________________
[hidden email] 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.
Reply | Threaded
Open this post in threaded view
|

Re: Comparing dcast and reshape

David Winsemius

On Oct 17, 2012, at 2:09 PM, Nutter, Benjamin wrote:

> I'm in the middle of my own little intellectual exercise comparing
> dcast() and reshape() and have successfully stumped myself.  I want to
> melt() a data frame, then dcast() it into a new form.  After doing  
> so, I
> want to duplicate the process using reshape().
>
> So far, I can do the melt and cast
>
> require(reshape2)
>
> Raw <- data.frame(site = c(1, 1, 1, 1, 2, 2, 2, 2),
>                  id   = c(1, 1, 2, 2, 1, 1, 2, 2),
>                  instrument = rep(c("beck", "phq"), 4),
>                  base.score = c(27, 13, 31, 11, 22, 10, 41, 17),
>                  score.90d = c(20, 11, 27, 12, 24, 8, 34, 15))
>
> Full.Melt <- melt(Raw, id.vars=c("site", "id", "instrument"),
>                  measure.vars=c("base.score", "score.90d"))
>
> FullCast <- dcast(Full.Melt, site + id ~ instrument + variable,
>                   value.var="value")
>
>> FullCast
>  site id beck_base.score beck_score.90d phq_base.score phq_score.90d
> 1    1  1              27             20             13            11
> 2    1  2              31             27             11            12
> 3    2  1              22             24             10             8
> 4    2  2              41             34             17            15
>
>
> I can also replicate the melt using reshape, but I can't reshape it  
> into
> the same wide format.
>
> FullLong <- reshape(Raw,
>                    varying=list(score=c("base.score", "score.90d")),
>                    idvar=c("site", "id", "instrument"),
>                    direction="long")
>
>
> Any pointers on how to get FullLong into the same wide format as
> FullCast?

The reshape function will "recognize" that the object was created as a  
wide->long reshaping and if you just use this code, you will get back  
the original:

reshape(FullLong)

--

David Winsemius, MD
Alameda, CA, USA

______________________________________________
[hidden email] 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.
Reply | Threaded
Open this post in threaded view
|

Re: Comparing dcast and reshape

nutterb
Thanks for the prompt reply, Dr. Winsemius.

reshape(FullLong)  

Will return the original data frame, but that wasn't quite what I wanted.  I wanted to take it to a wider form than the original.

But I just answered my own question (typically, _after_ asking the world at large).

FullWide <- reshape(Raw,
        v.names=c("base.score", "score.90d"),
        timevar="instrument",
        idvar=c("site", "id"),
        direction="wide")

gives me what I was looking for.  I suspect there isn't a way to go directly from FullLong to FullWide, but if someone can prove me wrong, I'd love to see how.

  Benjamin Nutter |  Biostatistician     |  Quantitative Health Sciences
  Cleveland Clinic    |  9500 Euclid Ave.  |  Cleveland, OH 44195  | (216) 445-1365



-----Original Message-----
From: David Winsemius [mailto:[hidden email]]
Sent: Wednesday, October 17, 2012 5:18 PM
To: Nutter, Benjamin
Cc: [hidden email]
Subject: Re: [R] Comparing dcast and reshape


On Oct 17, 2012, at 2:09 PM, Nutter, Benjamin wrote:

> I'm in the middle of my own little intellectual exercise comparing
> dcast() and reshape() and have successfully stumped myself.  I want to
> melt() a data frame, then dcast() it into a new form.  After doing so,
> I want to duplicate the process using reshape().
>
> So far, I can do the melt and cast
>
> require(reshape2)
>
> Raw <- data.frame(site = c(1, 1, 1, 1, 2, 2, 2, 2),
>                  id   = c(1, 1, 2, 2, 1, 1, 2, 2),
>                  instrument = rep(c("beck", "phq"), 4),
>                  base.score = c(27, 13, 31, 11, 22, 10, 41, 17),
>                  score.90d = c(20, 11, 27, 12, 24, 8, 34, 15))
>
> Full.Melt <- melt(Raw, id.vars=c("site", "id", "instrument"),
>                  measure.vars=c("base.score", "score.90d"))
>
> FullCast <- dcast(Full.Melt, site + id ~ instrument + variable,
>                   value.var="value")
>
>> FullCast
>  site id beck_base.score beck_score.90d phq_base.score phq_score.90d
> 1    1  1              27             20             13            11
> 2    1  2              31             27             11            12
> 3    2  1              22             24             10             8
> 4    2  2              41             34             17            15
>
>
> I can also replicate the melt using reshape, but I can't reshape it
> into the same wide format.
>
> FullLong <- reshape(Raw,
>                    varying=list(score=c("base.score", "score.90d")),
>                    idvar=c("site", "id", "instrument"),
>                    direction="long")
>
>
> Any pointers on how to get FullLong into the same wide format as
> FullCast?

The reshape function will "recognize" that the object was created as a  
wide->long reshaping and if you just use this code, you will get back
the original:

reshape(FullLong)

--

David Winsemius, MD
Alameda, CA, USA


===================================


 Please consider the environment before printing this e-mail

Cleveland Clinic is ranked one of the top hospitals in America by U.S.News & World Report (2012).  
Visit us online at http://www.clevelandclinic.org for a complete listing of our services, staff and locations.


Confidentiality Note:  This message is intended for use ...{{dropped:18}}

______________________________________________
[hidden email] 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.