[R] Order all the columns ascending elements on a matrix or a data frame

Bert Gunter gunter.berton at gene.com
Sun Jun 10 23:31:23 CEST 2012


On Sun, Jun 10, 2012 at 2:22 PM, arun <smartpink111 at yahoo.com> wrote:
> Hi Bert,
>
> I tried the code.
>
>  dat2<-data.frame(dat1)
>> do.call(order,dat2)
>  [1]  3  6  1 10  2  5  7  9  8  4
>
>
> Here, I get the order of 1st column as a list.  Is there anything I am missing here?
No you don't. You get a vector of row indices, but ...

My oversight. Subscript the rows of dat2 by this:

dat2[do.call(order,dat2) , ]

-- Bert
>
> Thanks,
> A.K.
>
>
>
>
> ----- Original Message -----
> From: Bert Gunter <gunter.berton at gene.com>
> To: arun <smartpink111 at yahoo.com>
> Cc: Trying To learn again <tryingtolearnagain at gmail.com>; R help <r-help at r-project.org>
> Sent: Sunday, June 10, 2012 4:47 PM
> Subject: Re: [R] Order all the columns ascending elements on a matrix or a data frame
>
> Inline ...
>
> -- Bert
>
> On Sun, Jun 10, 2012 at 10:46 AM, arun <smartpink111 at yahoo.com> wrote:
>> Hi,
>>
>> If your intention is to order the first column by ascending, then by 2nd and so on..
>> Try this.
>>
>>  set.seed(1)
>>   dat1<-cbind(x=rnorm(10,5,0.5),y=runif(10,0.4),z=rnorm(10,15,0.2))
>>  dat1
>>              x         y        z
>>  [1,] 4.686773 0.9608231 14.99101
>>  [2,] 5.091822 0.5272855 14.99676
>>  [3,] 4.582186 0.7910043 15.18877
>>  [4,] 5.797640 0.4753331 15.16424
>>  [5,] 5.164754 0.5603324 15.11878
>>  [6,] 4.589766 0.6316685 15.18380
>>  [7,] 5.243715 0.4080342 15.15643
>>  [8,] 5.369162 0.6294328 15.01491
>>  [9,] 5.287891 0.9218145 14.60213
>> [10,] 4.847306 0.6042094 15.12397
>>
>>  dat1[order(dat1[,1],dat1[,2],dat1[,3]),]
>
> ## if dat1 is a data frame, e.g.
>
> dat1 <- data.frame(dat1)
>
> ## This can be shortened to:
>
> do.call(order,dat1)
>
> ?do.call
>
> -- Bert
>
>>              x         y        z
>>  [1,] 4.582186 0.7910043 15.18877
>>  [2,] 4.589766 0.6316685 15.18380
>>  [3,] 4.686773 0.9608231 14.99101
>>  [4,] 4.847306 0.6042094 15.12397
>>  [5,] 5.091822 0.5272855 14.99676
>>  [6,] 5.164754 0.5603324 15.11878
>>  [7,] 5.243715 0.4080342 15.15643
>>  [8,] 5.287891 0.9218145 14.60213
>>  [9,] 5.369162 0.6294328 15.01491
>> [10,] 5.797640 0.4753331 15.16424
>>
>>
>>
>> But, if it is like to order all the columns at once,
>>
>> apply(dat1,2,sort)
>>
>>              x         y        z
>>  [1,] 4.582186 0.4080342 14.60213
>>  [2,] 4.589766 0.4753331 14.99101
>>  [3,] 4.686773 0.5272855 14.99676
>>  [4,] 4.847306 0.5603324 15.01491
>>  [5,] 5.091822 0.6042094 15.11878
>>  [6,] 5.164754 0.6294328 15.12397
>>  [7,] 5.243715 0.6316685 15.15643
>>  [8,] 5.287891 0.7910043 15.16424
>>  [9,] 5.369162 0.9218145 15.18380
>> [10,] 5.797640 0.9608231 15.18877
>>
>> Here, the all columns are sorted to ascending, but only problem is that the corresponding elements in each of the rows in the original dataset has also changed.
>>
>>
>> A.K.
>>
>>
>>
>>
>> ----- Original Message -----
>> From: Trying To learn again <tryingtolearnagain at gmail.com>
>> To: r-help at r-project.org
>> Cc:
>> Sent: Sunday, June 10, 2012 2:36 AM
>> Subject: [R] Order all the columns ascending elements on a matrix or a data frame
>>
>> Imagine I have a csv KT.csv
>>
>> I want to create a new dataframe o convert KT in a matrix and create a new
>> matrix with each column of KT ordered by ascending order.
>>
>> I have tried to make this
>>
>> b<-read.csv("KT.csv")
>>
>>
>> for(i in 1:ncol(b)){
>>
>> b[,i]<-sort(b[,i])
>>
>> }
>>
>> But it puts a message that the number of rows doesn´t correspond.
>>
>> Can someone give me a clue on how to order.
>>
>> Many Thaks.
>>
>> ______________________________________________
>> R-help at r-project.org mailing list
>> https://stat.ethz.ch/mailman/listinfo/r-help
>> PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
>> and provide commented, minimal, self-contained, reproducible code.
>>
>>
>> ______________________________________________
>> R-help at r-project.org mailing list
>> https://stat.ethz.ch/mailman/listinfo/r-help
>> PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
>> and provide commented, minimal, self-contained, reproducible code.
>
>
>
> --
>
> Bert Gunter
> Genentech Nonclinical Biostatistics
>
> Internal Contact Info:
> Phone: 467-7374
> Website:
> http://pharmadevelopment.roche.com/index/pdb/pdb-functional-groups/pdb-biostatistics/pdb-ncb-home.htm
>



-- 

Bert Gunter
Genentech Nonclinical Biostatistics

Internal Contact Info:
Phone: 467-7374
Website:
http://pharmadevelopment.roche.com/index/pdb/pdb-functional-groups/pdb-biostatistics/pdb-ncb-home.htm



More information about the R-help mailing list