通过增加频率重新排序因子

时间:2017-08-23 18:26:28

标签: r tidyverse

如何按频率重新排序因子值列?按递增顺序?

虽然forcats包提供了一种根据频率(fct_infreq())对因子进行重新排序的明确方法,但它会降低频率顺序。我需要因子频率/计数的相反顺序。

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" 

是否有一种简单的方法来翻转排序,以便最不频繁的因素(“6”)是第一个,最常见的(“3”)是最后一个?

3 个答案:

答案 0 :(得分:6)

这可以通过使用fct_rev简单地完成,如下所示:

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

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

答案 1 :(得分:2)

或者,您可以通过排序和重置级别在基础R中执行此操作。

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 

答案 2 :(得分: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