[R] sorting data in R
Kevin Wright
kw.statr at gmail.com
Fri Apr 20 22:47:12 CEST 2007
Now that "sort" is a generic function, I have modified my original
sort.data.frame function to be s 'data.frame' method to sort. (You
now have to specify the formula as the 'by' argument).
See the R Wiki:
http://wiki.r-project.org/rwiki/doku.php?id=tips:data-frames:sort&s=sort%20data
There are also some other tips on that page for sorting.
Kevin Wright
On 4/20/07, gyadav at ccilindia.co.in <gyadav at ccilindia.co.in> wrote:
>
> Hi
>
> Best function for sorting which i have used and many in the community :-)
> HTH Cheers
>
> sort.data.frame(Oats, ~ -nitro + Variety)
>
> Feedback and improvements are welcome.
>
> sort.data.frame <- function(form,dat){
> # Author: Kevin Wright
> # Some ideas from Andy Liaw
> # http://tolstoy.newcastle.edu.au/R/help/04/07/1076.html
>
> # Use + for ascending, - for decending.
> # Sorting is left to right in the formula
>
> # Useage is either of the following:
> # library(nlme); data(Oats)
> # sort.data.frame(~-Variety+Block,Oats) # Note: levels(Oats$Block)
> # sort.data.frame(Oats,~nitro-Variety)
>
> # If dat is the formula, then switch form and dat
> if(inherits(dat,"formula")){
> f=dat
> dat=form
> form=f
> }
> if(form[[1]] != "~")
> stop("Formula must be one-sided.")
>
> # Make the formula into character and remove spaces
> formc <- as.character(form[2])
> formc <- gsub(" ","",formc)
> # If the first character is not + or -, add +
> if(!is.element(substring(formc,1,1),c("+","-")))
> formc <- paste("+",formc,sep="")
>
> # Extract the variables from the formula
> if(exists("is.R") && is.R()){
> vars <- unlist(strsplit(formc, "[\\+\\-]"))
> }
> else{
> vars <- unlist(lapply(unpaste(formc,"-"),unpaste,"+"))
> }
> vars <- vars[vars!=""] # Remove spurious "" terms
>
> # Build a list of arguments to pass to "order" function
> calllist <- list()
> pos=1 # Position of + or -
> for(i in 1:length(vars)){
> varsign <- substring(formc,pos,pos)
> pos <- pos+1+nchar(vars[i])
> if(is.factor(dat[,vars[i]])){
> if(varsign=="-")
> calllist[[i]] <- -rank(dat[,vars[i]])
> else
> calllist[[i]] <- rank(dat[,vars[i]])
> }
> else {
> if(varsign=="-")
> calllist[[i]] <- -dat[,vars[i]]
> else
> calllist[[i]] <- dat[,vars[i]]
> }
> }
> dat[do.call("order",calllist),]
>
> }
>
>
>
>
>
>
>
>
>
>
> elyakhlifi mustapha <elyakhlifi_mustapha at yahoo.fr>
> Sent by: r-help-bounces at stat.math.ethz.ch
> 20-04-07 03:30 PM
>
> To
> R-help at stat.math.ethz.ch
> cc
>
> Subject
> [R] sorting data in R
>
>
>
>
>
>
> hello,
> I'd like know how to sort a data frame in R for example how I should do
> to sort by Catholic with swiss data frame like below
> thanks
>
> Fertility Agriculture Examination Education Catholic
> Infant.Mortality
> Courtelary 80.2 17.0 15 12 9.96 22.2
> Delemont 83.1 45.1 6 9 84.84 22.2
> Franches-Mnt 92.5 39.7 5 5 93.40 20.2
> Moutier 85.8 36.5 12 7 33.77 20.3
> Neuveville 76.9 43.5 17 15 5.16 20.6
> Porrentruy 76.1 35.3 9 7 90.57 26.6
> Broye 83.8 70.2 16 7 92.85 23.6
> Glane 92.4 67.8 14 8 97.16 24.9
> Gruyere 82.4 53.3 12 7 97.67 21.0
> Sarine 82.9 45.2 16 13 91.38 24.4
> Veveyse 87.1 64.5 14 6 98.61 24.5
> Aigle 64.1 62.0 21 12 8.52 16.5
> Aubonne 66.9 67.5 14 7 2.27 19.1
> Avenches 68.9 60.7 19 12 4.43 22.7
> Cossonay 61.7 69.3 22 5 2.82 18.7
> Echallens 68.3 72.6 18 2 24.20 21.2
> Grandson 71.7 34.0 17 8 3.30 20.0
> Lausanne 55.7 19.4 26 28 12.11 20.2
> La Vallee 54.3 15.2 31 20 2.15 10.8
> Lavaux 65.1 73.0 19 9 2.84 20.0
> Morges 65.5 59.8 22 10 5.23 18.0
> Moudon 65.0 55.1 14 3 4.52 22.4
> Nyone 56.6 50.9 22 12 15.14 16.7
> Orbe 57.4 54.1 20 6 4.20 15.3
> Oron 72.5 71.2 12 1 2.40 21.0
> Payerne 74.2 58.1 14 8 5.23 23.8
> Paysd'enhaut 72.0 63.5 6 3 2.56 18.0
> Rolle 60.5 60.8 16 10 7.72 16.3
> Vevey 58.3 26.8 25 19 18.46 20.9
> Yverdon 65.4 49.5 15 8 6.10 22.5
> Conthey 75.5 85.9 3 2 99.71 15.1
> Entremont 69.3 84.9 7 6 99.68 19.8
> Herens 77.3 89.7 5 2 100.00 18.3
> Martigwy 70.5 78.2 12 6 98.96 19.4
> Monthey 79.4 64.9 7 3 98.22 20.2
> St Maurice 65.0 75.9 9 9 99.06 17.8
> Sierre 92.2 84.6 3 3 99.46 16.3
> Sion 79.3 63.1 13 13 96.83 18.1
> Boudry 70.4 38.4 26 12 5.62 20.3
> La Chauxdfnd 65.7 7.7 29 11 13.79 20.5
> Le Locle 72.7 16.7 22 13 11.22 18.9
> Neuchatel 64.4 17.6 35 32 16.92 23.0
> Val de Ruz 77.6 37.6 15 7 4.97 20.0
> ValdeTravers 67.6 18.7 25 7 8.65 19.5
> V. De Geneve 35.0 1.2 37 53 42.34 18.0
> Rive Droite 44.7 46.6 16 29 50.43 18.2
> Rive Gauche 42.8 27.7 22 29 58.33 19.3
>
>
>
> ___________________________________________________________________________
>
> Découvrez une nouvelle façon d'obtenir des réponses à toutes vos questions
> !
> Profitez des connaissances, des opinions et des expériences des
> internautes sur Yahoo! Questions/Réponses
>
> [[alternative HTML version deleted]]
>
> ______________________________________________
> R-help at stat.math.ethz.ch 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.
>
>
>
> ============================================================================================
> DISCLAIMER AND CONFIDENTIALITY CAUTION:\ \ This message and ...{{dropped}}
>
>
> ______________________________________________
> R-help at stat.math.ethz.ch 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.
>
>
More information about the R-help
mailing list