[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