Re: [R] sorting data in R

From: <gyadav_at_ccilindia.co.in>
Date: Fri, 20 Apr 2007 15:54:03 +0530

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. Received on Fri 20 Apr 2007 - 10:51:53 GMT

Archive maintained by Robert King, hosted by the discipline of statistics at the University of Newcastle, Australia.
Archive generated by hypermail 2.2.0, at Fri 20 Apr 2007 - 21:31:52 GMT.

Mailing list information is available at https://stat.ethz.ch/mailman/listinfo/r-help. Please read the posting guide before posting to the list.