2017-06-28 1 views
1

Je veux commander une trame de données d'abord d'après une colonne d'une manière ascendante, et une deuxième colonne spécifiée par les niveaux de une variable externe.R: comment commander une trame de données en fonction d'une colonne ET à une variable externe en une commande

Compte tenu de la MWF suivante:

mylevels <- c("domain", "kingdom", "phylum", "class", "order", "family", "genus", "species") 
mydf <- data.frame(ID=rep(c("A","B","C"), each=8), LEVEL=rep(mylevels, 3), VALUE=1:24) 
mydf2 <- mydf[sample(nrow(mydf)),] 

Je veux commander mydf2 pour obtenir l'ordre d'origine dans mydf, selon ID ascendantly, et LEVEL tel que spécifié dans mylevels, en une seule commande. C'est possible?

(note mydf est conservée à des fins de démonstration, dans mon cas réel de la vie que je commence à partir mydf2)

Merci!

+0

Peut-être que [ce] (https://stackoverflow.com/questions/1296646/how-to-sort-a-dataframe-by-columns) aide –

Répondre

1

niveaux Jeu de facteur sur LEVEL avec le bon ordre, puis trier par ID et NIVEAU:

mydf2$LEVEL = factor(mydf2$LEVEL, levels = mylevels) 
mydf2 = mydf2[order(mydf2$ID, mydf2$LEVEL), ] 

Sortie:

> head(mydf2) 
    ID LEVEL VALUE 
1 A domain  1 
2 A kingdom  2 
3 A phylum  3 
4 A class  4 
5 A order  5 
6 A family  6