[R] Sort a data frame

Liaw, Andy andy_liaw at merck.com
Tue Jul 20 14:59:35 CEST 2004


Since this is such an FAQ, perhaps sort() could be made generic, with a
method for data frame?  Here's a crack at it:

sort.data.frame <- function(x, key, ...) {
    if (missing(key)) {
        rn <- rownames(x)
        if (all(rn %in% 1:nrow(x))) rn <- as.numeric(rn)
        x[order(rn, ...), , drop=FALSE]
    } else {
        x[do.call("order", c(x[key], ...)), , drop=FALSE]
    }
}

Here the default behavior, when `key' is not supplied, is to sort by
rownames.  One (more sensible?) alternative is to sort by all columns in the
data frame, by making key=names(x).

[If the rownames of the data frame are numbers but not consecutive integers,
it may give the unintuitive result.  Does anyone know how to test whether a
character can be coerced into numeric without generating a warning?]

Andy

> From: Luis Rideau Cruz
> 
> Hi all 
> 
> I have the next data frame 
> 
>     year   STOD    SLAGNR  TAL TALT   TALVEKT
> 1 2002  2120006     57      1      NA      1
> 2 1997  97030032    57     NA   NA      NA
> 3 1997  97030071    27     1      NA      NA
> 4 1997  97030005    57     1      NA      NA
> 5 1997  97020127    60     NA   1         NA
> 6 2001  1160025     27      1      NA      1
> 7 1998  98020069    60     1      NA      NA
> 8 1996  96030009    57     NA   1         NA
> 
> How to sort it according to "year" column
> Sort does seem to work only on vectors
> 
> Thank you
> 
> Luis Ridao Cruz
> Fiskirannsóknarstovan
> Nóatún 1
> P.O. Box 3051
> FR-110 Tórshavn
> Faroe Islands
> Phone:             +298 353900
> Phone(direct): +298 353912
> Mobile:             +298 580800
> Fax:                 +298 353901
> E-mail:              luisr at frs.fo
> Web:                www.frs.fo
> 
> ______________________________________________
> R-help at stat.math.ethz.ch mailing list
> https://www.stat.math.ethz.ch/mailman/listinfo/r-help
> PLEASE do read the posting guide! 
> http://www.R-project.org/posting-guide.html
> 
>




More information about the R-help mailing list