Just learned another trick today. Thanks a lot to both of you for the kind
help!

Gang

On Sun, May 22, 2011 at 6:04 PM, Dennis Murphy <djmuser@gmail.com> wrote:

> Hi:
>
> library(reshape2)
> d1 <- melt(d, id = 'Subj')
> d1 <- cbind(d1, colsplit(d1$variable, '_', c('Time', 'Cond')))
> d1 <- transform(d1,
>                Time = substr(Time, 2, 2),
>                Cond = substr(Cond, 5, 5))[c(1, 4, 5, 3)]
> str(d1)
> d1
>
> You can decide whether to leave Time and Cond as character or to
> convert them to numeric or factor.
>
> HTH,
> Dennis
>


> Assume this is a dataframe named 'tst'
>
> require(reshape2)
> ltest <- melt(tst, id.vars =1)
>
> dcast(ltest,  ubj+substr(variable, 1,2) + substr(variable, 4,8) ~. )
>  ubj substr(variable, 1, 2) substr(variable, 4, 8)       NA
> 1   1                     T1                  Cond1 0.125869
> 2   1                     T1                  Cond2 4.108232
> 3   1                     T2                  Cond1 1.099392
> 4   1                     T2                  Cond2 5.556614
> 5   2                     T1                  Cond1 1.427940
> 6   2                     T1                  Cond2 2.170026
> 7   2                     T2                  Cond1 0.120748
> 8   2                     T2                  Cond2 1.176353
>
> dcast(ltest,  ubj+substr(variable, 1,2) ~ substr(variable, 4,8) )
>
>  ubj substr(variable, 1, 2)    Cond1    Cond2
> 1   1                     T1 0.125869 4.108232
> 2   1                     T2 1.099392 5.556614
> 3   2                     T1 1.427940 2.170026
> 4   2                     T2 0.120748 1.176353
>
> The modifications to get it exactly as requested are left to the reader
>


> On Sun, May 22, 2011 at 2:25 PM, Gang Chen <gangchen6@gmail.com> wrote:
> > I know how to convert a simple dataframe from wide to long format with
> one
> > varying factor. However, for a dataset with two factors like the
> following,
> >
> > Subj T1_Cond1 T1_Cond2 T2_Cond1 T2_Cond2
> >  1   0.125869   4.108232   1.099392   5.556614
> >  2   1.427940   2.170026   0.120748   1.176353
> >
> > How to elegantly convert to a long form as
> >
> > Subj  Time Cond  Value
> > 1         1        1       0.125869
> > 1         1        2       4.108232
> > 1         2        1       1.099392
> > ...
> >
> > Thanks in advance!
> >
> > Gang
>

	[[alternative HTML version deleted]]

