2017-08-23 1 views
2

Comment puis-je réorganiser les colonnes à facteur factorisé par fréquence - dans un ordre croissant?Réorganiser les facteurs en augmentant la fréquence

Alors que le paquet forcats fournit une manière explicite de réorganiser un facteur en fonction de sa fréquence (fct_infreq()), il le fait en ordre décroissant de fréquence. J'ai besoin de l'ordre inverse de la fréquence/nombre de facteurs.

E.g.

library(forcats) 
set.seed(555) 
df <- data.frame(x=factor(sample(as.character(1:10), 100, replace=TRUE))) 
table(df$x) 

1 10 2 3 4 5 6 7 8 9 
9 10 12 14 10 10 5 12 8 10 

levels(fct_infreq(df$x)) 

[1] "3" "2" "7" "10" "4" "5" "9" "1" "8" "6" 

Y at-il un moyen simple de retourner la commande de sorte que le facteur le moins fréquent (« 6 ») est d'abord et le plus fréquent (« 3 ») durer?

Répondre

4

Cela peut être fait en utilisant simplement fct_rev comme suit:

levels(fct_rev(fct_infreq(df$x))) 

[1] "6" "8" "1" "9" "5" "4" "10" "7" "2" "3" 
2

Ou, vous pouvez le faire dans la base R par le tri et remise à zéro des niveaux.

xLev = names(table(df$x))[order(table(df$x))] 
df$x = factor(df$x, levels=xLev) 
table(df$x) 
6 8 1 10 4 5 9 2 7 3 
5 8 9 10 10 10 10 12 12 14 
0
with(data.frame(table(df$x)), setNames(sort(Freq), Var1[order(Freq)])) 
# 6 8 1 10 4 5 9 2 7 3 
# 5 8 9 10 10 10 10 12 12 14