
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@yahoo.fr> 
Sent by: r-help-bounces@stat.math.ethz.ch
20-04-07 03:30 PM

To
R-help@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@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}}

