[R] how to reshape the data.frame from long to wide in a specific order

Gabor Grothendieck ggrothendieck at gmail.com
Tue Mar 15 04:04:04 CET 2011


On Mon, Mar 14, 2011 at 9:06 PM, zhenjiang xu <zhenjiang.xu at gmail.com> wrote:
> Hi,
>
> For example, the data.frame like:
>
> origdata.long <- read.table(header=T, con <- textConnection('
>  subject sex condition measurement
>       1   M   control         7.9
>       1   M     first        12.3
>       1   M    second        10.7
>       2   F   control         6.3
>       2   F     first        10.6
>       2   F    second        11.1
>       3   F   control         9.5
>       3   F     first        13.1
>       3   F    second        13.8
>       4   M   control        11.5
>       4   M     first        13.4
>       4   M    second        12.9
>  '))
> close(con)
>
> Given a vector c('first', 'second', 'control), how can I reshape the
> data.frame to this?
> # subject sex  first second   control
> #       1   M  12.3  10.7     7.9
> #       2   F  10.6  11.1     6.3
> #       3   F  13.1  13.8     9.5
> #       4   M  13.4  12.9    11.5
>
> I know reshape() can transform the data.frame from long to wide, but it
> seems not able to control the order of the columns.

You could reorder the columns afterwards:

reshape(origdata.long, dir = "wide", idvar = c("subject", "sex"),
timevar = "condition")[ c(1:2, 4:5, 3) ]

-- 
Statistics & Software Consulting
GKX Group, GKX Associates Inc.
tel: 1-877-GKX-GROUP
email: ggrothendieck at gmail.com



More information about the R-help mailing list