[R] reshape a matrix

David Winsemius dwinsemius at comcast.net
Sat Aug 20 19:04:06 CEST 2011


On Aug 20, 2011, at 12:32 PM, Uwe Ligges wrote:

> On 20.08.2011 17:04, Wendy wrote:
>> Hi all,
>>
>> I have a data.frame like following
>>
>> A<-c('d0','d0','d1','d1','d2','d2')
>> B<-rep(c('control','sample'),3)
>> C<-c(rep(100000,2),200,300,400,500)
>> dataframe<-data.frame(A,B,C)
>>
>> I want to reshape the matrix, so the matrix with 'd0', 'd1' and  
>> 'd2' in rows
>> and 'control' and 'sample' in columns. Is there a function for  
>> doing this
>> easily?
>
> See ?reshape
>
> reshape(data=dataframe, idvar="A", timevar="B", direction="wide")
>
> Uwe Ligges

Many people have experienced problems understanding the mechanics of  
the base function 'reshape'. If you do not and if do continue to use  
it, you would be doing the world a great service by writing a tutorial  
manual with a bunch of worked examples. I have never found a tutorial  
that clarified how I should use it in the variety of situations where  
I have needed it.

  So Hadley wrote an alternate facility   ... the reshape package that  
does not have a reshape function in it but rather two functions 'melt'  
and 'cast'. Your data is all ready "molten", i.e. it is in the long  
format (in the terminology of the base reshape function) with  
identifier values in each row and a single column of values.

 > library(reshape)
 > cast(dataframe,A~B)
Using C as value column.  Use the value argument to cast to override  
this choice
    A control sample
1 d0   1e+05  1e+05
2 d1   2e+02  3e+02
3 d2   4e+02  5e+02

Basically the cast formula keeps the LHS variables in the rows and hte  
RHD variables get arranges in columns. (For reasons that are unclear  
to me the dataframe argument was placed first when using positional  
argument passing, unlike most other formula methods in R.)
-- 

David Winsemius, MD
West Hartford, CT



More information about the R-help mailing list