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

David Winsemius dwinsemius at comcast.net
Tue Mar 15 03:46:45 CET 2011


On Mar 14, 2011, at 10:24 PM, Henrique Dallazuanna wrote:

> Try this:
>
> reshape(origdata.long, direction = 'wide', timevar = 'condition',  
> idvar =
> c('subject', 'sex'))

If you first set the order in the desired sequence:

origdata.long$condition <- factor(origdata.long$condition,  
levels=c('first', 'second', 'control')  )

And then sort in that order before the reshape:

reshape(origdata.long[order(origdata.long$condition), ],
         direction = 'wide',
         timevar = 'condition',
         idvar = c('subject', 'sex'))

You get what you asked for. It seems to be driven by the order in  
which the values appear in the timevar and that_ might_ even be in the  
help page, but reshape has is one of the most confusing help pages on  
the planet.

-- 
David.
>
> On Mon, Mar 14, 2011 at 10: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.
>>
>> Thanks ahead of time
>> --
>> Best,
>> Zhenjiang


David Winsemius, MD
West Hartford, CT



More information about the R-help mailing list