Works great. I did a couple changes so as to not affect the original data.frame (and had to add levels back b/c I removed them in the original read.csv).
a <- data.frame(V1=letters[rep(4:1,2)], V2=1001:1008) b <- a levels(b) <- unique(a$V1) b$V1 <- factor(b$V1,levels=c('c','d','a','b')) a.sorted<- a[do.call(order,b[c('V1','V2')]),] Thank you. ----------------------------- On Fri, Oct 14, 2011 at 12:50 PM, William Dunlap <wdun...@tibco.com> wrote: > Set the levels of the factor a$V1 to the order > in which you want them to be sorted. E.g., > > > a <- data.frame(V1=letters[rep(4:1,2)], V2=1001:1008) > > a[do.call(order,a[c('V1','V2')]),] > V1 V2 > 4 a 1004 > 8 a 1008 > 3 b 1003 > 7 b 1007 > 2 c 1002 > 6 c 1006 > 1 d 1001 > 5 d 1005 > > a$V1 <- factor(a$V1, levels=c("a","c","d","b")) > > a[do.call(order,a[c('V1','V2')]),] > V1 V2 > 4 a 1004 > 8 a 1008 > 2 c 1002 > 6 c 1006 > 1 d 1001 > 5 d 1005 > 3 b 1003 > 7 b 1007 > > This means that tables and plots will be ordered in > the way as well. E.g., > > > with(a, table(V1, V2)) > V2 > V1 1001 1002 1003 1004 1005 1006 1007 1008 > a 0 0 0 1 0 0 0 1 > c 0 1 0 0 0 1 0 0 > d 1 0 0 0 1 0 0 0 > b 0 0 1 0 0 0 1 0 > > > Bill Dunlap > Spotfire, TIBCO Software > wdunlap tibco.com > > > -----Original Message----- > > From: r-help-boun...@r-project.org [mailto:r-help-boun...@r-project.org] > On Behalf Of Trevor Davies > > Sent: Friday, October 14, 2011 12:05 PM > > To: r-help@r-project.org > > Subject: [R] sorting dataframe by arbitrary order > > > > This has been dogging me for a while. I've started making a lot of tables > > via xtable so the way I want to sort things is not always in alphabetical > or > > numerical order. > > > > As an example, consider I have a dataframe as follows > > > > set.seed(100) > > a <- data.frame(V1=sample(letters[1:4],100, replace=T),V2=1:100) > > > > I know I can sort the columns first by V1 first and then by V2 by: > > > > sorted.a <- a[do.call(order,a[c('V1','V2')]),] > > > > What I want to do is exactly that but I do not want V1 sorted > > alphabetically. Rather, I would like it sorted as 'a','c','d','b'. > > > > I know I could do it with a subset, rbind function but I thought there > may > > be a more elegant way? > > > > Thanks for the help. > > > > [[alternative HTML version deleted]] > > > > ______________________________________________ > > R-help@r-project.org 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. > [[alternative HTML version deleted]] ______________________________________________ R-help@r-project.org 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.