J'ai un data.frame avec plusieurs facteurs tels que:R: Tri facteur par la fréquence de niveau et de traçage
df<-data.frame(Var1=as.factor(sample(c("AB", "BC", "CD", "DE", "EF"), 1000, replace=TRUE)))
avec
summary(df$Var1)
AB BC CD DE EF
209 195 178 221 197
Je veux tracer la fréquence des niveaux de chaque facteur dans le data.frame comme suit:
Cependant, l'ordre des niveaux est alphabétique et non par fréquence. En utilisant nombre de bibliothèque (plyr) Je peux créer une nouvelle data.frame qui me donne la fréquence de chaque niveau:
df_count <-count(df, "Var1")
Var1 freq
1 AB 209
2 BC 195
3 CD 178
4 DE 221
5 EF 197
Ce que je peux ensuite modifier l'ordre à l'aide
df_count$Var1<-factor(df_count$Var1, levels=df_count$Var1[order(df_count$freq, decreasing=TRUE)])
qui, une fois tracée donnez-moi ce que je veux, la fréquence triée de chaque niveau. 1.) Est-ce la solution la plus élégante? Cela me donne un data.frame supplémentaire pour chaque facteur/colonne dans mon data.frame d'origine, et je pense qu'il doit y avoir un moyen plus simple. 2.) Lors du traçage, comment puis-je renommer les légendes de légende et m'assurer qu'elles reçoivent le bon niveau de facteur? Si j'utilise
scale_fill_manual(labels=c("Name of AB", "Name of BC", "Name of CD", "Name of DE","Name of EF"))
les étiquettes ne se rapportent pas au bon niveau. Ici, la première entrée dans la légende sera "DE" car c'est le niveau avec la fréquence la plus haute mais l'étiquette dira "Nom de AB" comme défini dans scale_fill_manual. Je pourrais vérifier l'ordre des étiquettes manuellement à chaque fois mais il doit y avoir un moyen automatique?
Cela fonctionne parfaitement, merci! Combiné avec l'indice d'aosmith comment utiliser correctement les vecteurs nommés, il fonctionne comme un charme :-) – user45017