RE: [R] Sort a data frame

From: Liaw, Andy <andy_liaw_at_merck.com>
Date: Tue 20 Jul 2004 - 22:59:35 EST


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@frs.fo
> Web: www.frs.fo
>
> ______________________________________________
> R-help@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
>
>



R-help@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 Received on Tue Jul 20 23:12:47 2004

This archive was generated by hypermail 2.1.8 : Fri 18 Mar 2005 - 02:37:13 EST