If I understand correctly, the answer is a topological sort. Here is an explanation
https://davidurbina.blog/on-partial-order-total-order-and-the-topological-sort/ This was found by a simple web search on "Convert partial ordering to total ordering" Btw. Please use search engines before posting here. Bert On Thu, Mar 14, 2019, 10:50 PM Jim Lemon <drjimle...@gmail.com> wrote: > Hi Pedro, > This looks too simple to me, but it seems to work: > > swap<-function(x,i1,i2) { > tmp<-x[i1] > x[i1]<-x[i2] > x[i2]<-tmp > return(x) > } > mpo<-function(x) { > L<-unique(as.vector(x)) > for(i in 1:nrow(x)) { > i1<-which(L==x[i,1]) > i2<-which(L==x[i,2]) > if(i2<i1) L<-swap(L,i1,i2) > } > return(L) > } > mpo(matComp) > > Jim > > On Thu, Mar 14, 2019 at 10:30 PM Pedro Conte de Barros <pbar...@ualg.pt> > wrote: > > > > Dear All, > > > > This should be a quite established algorithm, but I have been searching > > for a couple days already without finding any satisfactory solution. > > > > I have a matrix defining pairs of Smaller-Larger arbitrary character > > values, like below > > > > Smaller <- c("ASD", "DFE", "ASD", "SDR", "EDF", "ASD") > > > > Larger <- c("SDR", "EDF", "KLM", "KLM", "SDR", "EDF" > > > > matComp <- cbind(Smaller, Larger) > > > > so that matComp looks like this > > > > Smaller Larger > > [1,] "ASD" "SDR" > > [2,] "DFE" "EDF" > > [3,] "ASD" "KLM" > > [4,] "SDR" "KLM" > > [5,] "EDF" "SDR" > > [6,] "ASD" "EDF" > > > > This matrix establishes six pairs of "larger than" relationships that > > can be used to sort the unique values in the matrix, > > > > > unique(as.vector(matComp)) > > [1] "ASD" "DFE" "SDR" "EDF" "KLM" > > > > Specifically, I would like to get this: > > > > sorted <- c("ASD", "DFE", "EDF", "SDR", "KLM") > > > > or, equally valid (my matrix does not have the full information): > > > > sorted <- c("DFE", "ASD", "EDF", "SDR", "KLM") > > > > Preferably, I would get the different combinations of the unique values > > that satisfy the "larger than" conditions in the matrix... > > > > > > I am sure this is a trivial problem, but I could not find any algorithm > > to solve it. > > > > Any help would be highly appreciated > > > > ______________________________________________ > > R-help@r-project.org mailing list -- To UNSUBSCRIBE and more, see > > 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. > > ______________________________________________ > R-help@r-project.org mailing list -- To UNSUBSCRIBE and more, see > 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 -- To UNSUBSCRIBE and more, see 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.